減少するシーケンス番号に複数のディレクトリの名前を変更しますか?

減少するシーケンス番号に複数のディレクトリの名前を変更しますか?

型の名前を持つ多くのサブディレクトリを含むディレクトリがありますdir.##。接頭辞は常に同じで、接尾辞は1〜3桁の厳密に増加する順序です。だから、次のようになります。

dir.0
dir.1
dir.2
dir.3
...
dir.9
dir.10
dir.11
...
dir.298
dir.299
dir.300

まず、最初のいくつかのディレクトリを削除したいと思います。これは些細なことです。

dir.7次に、すべての後続のディレクトリの名前を変更して、to dir.0dir.8to dir.1dir.10todir.3などの数字のサフィックスを移動しようとします。つまり、各サフィックス(数値として扱われる)を与えられた定数オフセットだけ移動します。

このような名前変更操作を実行する方法各ディレクトリの名前を個別に手動で変更する必要はありませんか?

別のツールを使用してこれを実行できますが、「エキゾチックな」ソフトウェアがなくても、bashですべてのことを行うことができれば良いでしょう。

答え1

この削減はかなり簡単な方法で行うことができます。最初からリストを生成します。すべてのケースを処理して「製品化」するのは簡単ではありませんが、最大ビット数などの項目をハードコーディングし、名前付きの他の項目がないと仮定する場合は、dir.*タイピングの少ないbash構文を使用してください。

i=0
for x in dir.{?,??,???}; do
  mv "$x" "${x%.*}.$i"
  ((++i))
done

この情報はdir.{?,??,???}以前ではなく以前に入手する必要がありますdir.*dir.9dir.10

<->zshでは、数字順に展開し、(n)数字で並べ替え(dir.9before )を使用してdir.10無料でより強力にすることができます。

i=0
for x in dir.<->(n); do
  mv $x ${x%.*}.$i
  ((++i))
done

答え2

別の方法:

n=7   # number to delete
max=$(printf "%s\n" dir.* | grep -o '[[:digit:]]*' | sort -n | tail -1)
for (( i=0; i<n; i++)); do rm -r "dir.$i"; done
for (( i=n; i<=max; i++ )); do mv "dir.$i" "dir.$((i-n))"; done

答え3

グラフィックツールKRenameを使用することもできます。

次のように進んでください。

  1. 文書を選択してください
  2. ファイル名を変更するオプションを選択してください
  3. JavaScriptプラグインを開く\
  4. フィールドプレフィックスが空、サフィックス:空、ファイル名:元の名前を使用、拡張子:その他の拡張子:減らす必要がある値は[js;krename_extension-OFFSET]どこにありますか?OFFSET

関連情報