2012-04-20 31 views
0

[email protected]のようなファイル名が間違っています。[email protected]~ipad.pngのようになります。複数のファイル名をbashシェルの名前に変更

これが私にこの質問を提起するのに適切な場所であるかどうかは不明です。そのようなファイル名を間違ったものから期待されるものに変換するためのシンプルなbashシェルスクリプトを書く方法。

+0

あなたは '含めるファイルの束の名前を変更する必要があると言っている〜その部分がない場合は拡張の前にipad? – c00kiemon5ter

+1

[大量リネームの方法は?](http://stackoverflow.com/questions/417916/how-to-do-a-mass-rename)の可能な複製。また、 '[shell] rename file'の検索で見つかった3000以上の質問があります。 –

答えて

0

mv [email protected] [email protected]~ipad.png man mvを利用できます。これは、ファイルがちょうどpngのでないならば、3文字の拡張子を想定し、この(不可知論拡張子)を使用して簡単に

for file in *; do 
    [[ "$file" =~ @2x~ipad\.png$ ]] || mv "$file" "${file%@*}@2x~ipad.png" 
done 

SH/POSIXに変換することもできるが、bashのを使用して

+1

彼が言った複数のファイル... – DipSwitch

+0

はい、数百多分。それを最初に見つけて、それを変換する必要があります。 – Forrest

+0

場所は固定されていませんか?それらのファイルはいくつかのディレクトリの下でグループ化されていませんか? – c00kiemon5ter

3

。その後、

for file in *; do 
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}" 
done 

これらのファイルは、いくつかのディレクトリの下にグループ化されていない場合は、スクリプトを必要としない指定されたルートディレクトリ

while read -r file; do 
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}" 
done < <(find /path/to/root/dir/to/look/under -type -f -name "*.png") 
+0

良い答え。彼は 'x2'を' 2x'に変換して '$ {file%x2。*} 2x〜ipad。$ {file ## *。} 'のようなものを要求しました。 – bdecaf

+1

良いキャッチは、質問でそれを見ていない。ファイル形式はクリアされるべきです。私は推測し続けることはできません;) – c00kiemon5ter

1

下再帰的findにそれらを試してみてください。 mmvを試してみてください。

mmv "*.png" "#1~ipad.png" 
0

あなたはたくさんのファイルのために簡単にこれを行うにはprenameperlが付属しています)を使用することができます。

prename 's/x2\.png/2x~ipad.png/' *.png 
関連する問題