2012-03-26 15 views
11

私は一度にたくさんのファイルの名前を変更するためのlinuxコマンドラインワンライナーを探していました。ファイルの名前を変更する1つのライナー

pattern1.a pattern1.b pattern1.c ... 

コマンドが実行されると、私は

pattern2.a pattern2.b pattern2.c ... 
+0

[Unix内で複数のファイルの名前を変更する]の複製が可能です(http://stackoverflow.com/questions/1086502/rename-multiple-files-in-unix) –

答えて

12
for i in pattern1.*; do mv -- "$i" "${i/pattern1/pattern2}"; done 

取得する必要がありますあなたはそれを実行する前に、それはがどうなるか見てmvの前でechoを貼り付けます。

1

この猫にはたくさんの方法があります。あなたが正規表現ではなく、fileglobであるためにあなたのパターンを好むだろう、とあなたが変更を行うしたい場合は、再帰的に、あなたはこのようなものを使用することができます

find . -print | sed -ne '/^\.\/pattern1\(\..*\)/s//mv "&" "pattern2\1"/p' 

がKerrekが彼の答えを示唆したように、これを最初にそれが何をするかを示します。コマンドに慣れたら、出力をシェルに通します(つまり、末尾に| shを追加します)。

この

は私のために動作します:あなたがLinuxを使用してすることが起こる場合

[[email protected] ~]$ ls -l foo.* 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.txt 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' 
mv "./foo.txt" "bar.txt" 
mv "./foo.php" "bar.php" 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' | sh 
[[email protected] ~]$ ls -l foo.* bar.* 
ls: foo.*: No such file or directory 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.txt 
[[email protected] ~]$ 
+0

そこに「猫の皮」が必要ですか? :D –

11

が、あなたはまた、/は/ usr/binにでperlスクリプトを持っている杖がシェルグロブよりも複雑なパターンに基づいてファイル名を変更した名前を変更することがあり許可する。

私のシステムの/ usr/bin/renameは、hereと記載されています。それはこのように使用することができます:詳細については、お使いのシステム上の

rename pattern1 pattern2 pattern1.* 

チェックman rename

rename "s/pattern1/pattern2/" pattern1.* 

other Linux environmentsの数このように使用されるかもしれない、異なるrenameを持っているように思われます。

+1

2番目の名前の変更例のための親指。 '' s/pattern1/pattern2/''がうまくいかなかった理由をウェブ全体で検索して問題を見つけることができませんでした。 –

関連する問題