1. ホーム
  2. linux

フォルダ内のファイル名を一括変更するシェル/Bashショートカット

2023-10-09 09:09:41

質問

正規表現または他の基準に基づいてフォルダー内のすべてのファイルの名前を変更できるシェル/Bash のショートカットはありますか。私がここで探しているのは、たとえば、次のような命名規則で 100 個のテキスト ファイルがあるフォルダーのドキュメントです。

<longdocumentidentifier>-doc-<counter>.txt.

私はちょうど上記の与えられた慣例ですべてのファイルの名前を変更する必要があります。

doc-<counter>.txt

上記のようなワンライナーはないでしょうか?

どのように解決するのですか?

このような方法をお勧めします。

for i in *-doc-*.txt; do mv "$i" "${i/*-doc-/doc-}"; done

${i/*-doc-/doc-} は、最初に現れる *-doc-doc- .

複数の置換を行う必要がある場合(コメント番号1参照)には、その置換のために ${var//Pattern/Replacement} というバリアントを使う必要があります。もし名前の先頭を置き換える必要があるなら、次のようにする必要があります。 ${var/#Pattern/Replacement} を使う必要があり、もし末尾 (つまり拡張子) を置き換える必要がある場合は ${var/%Pattern/Replacement} という形式を使う必要があります。

参照 シェルパラメータ展開 を参照してください。この拡張はbashに特有のものです。