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

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

型の名前を持つ多くのサブディレクトリを含むディレクトリがあります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

おすすめ記事