web-dev-qa-db-ja.com

ターミナルでのパターンベースのバッチファイルの名前変更

次の名前を変更する必要があります。

file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png

upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png

ターミナルコマンドを1行だけ使用して、どうすればそれを実現できますか?

45

rename を使用した上記の例の解決策:

rename -v -n 's/file_\d{1,3}/upl/' file_*.png

使用法:

rename [options] [Perl regex search/replace expression] [files]

man renameから:

   -v, --verbose
           Verbose: print names of files successfully renamed.
   -n, --no-act
           No Action: show what files would have been renamed.

renameは、引数として正規表現を取ることができます。

私たちが見ているのは、単一引用符'の間のコンテンツです。 /で区切って正規表現を配置できます。

式:s/(1)/(2)/ここで、(1) =検索パターン、および(2) =置換パターン。

したがって、 正規表現に慣れる 、パターンベースのバッチファイルの名前変更をお楽しみください!

75

ファイルが複数のディレクトリにある場合は、次のような検索後に名前変更を使用します。

find -iname file_*.png -type f -exec rename -n 's/file_[0-9]{3}(.*\.png)/upl$1/' {} \;

名前を変更した後の-nはテストするために削除し、続行するには!-)

このように、パワーを検索して名前を変更します。

個人的には、ソースヘッダーの名前を.hから.hppに変更しました

find -iname *.h -type f -exec rename 's/(.*\.)h/$1hpp/' {} \;
6
bcag2

これは、bashパラメーター展開の小さな魔法で行うことができます!

for f in file_[0-9]*_*; do mv $f upl_${f#file_[0-9]*_}; done

file_[0-9]*_*;-最初のパターンは、「file_anynumber_」で始まるすべてのファイルを通過するために使用されます
${f#file_[0-9]*_}-2番目のパターンfile_[0-9]*_はパラメーター拡張で使用され、bashに文字列の懇願から「file_anynumber_」を削除するよう指示します。

Parameter expansionの詳細:

man bash
5
Basharat Sialvi