Mac OS X(10.7.2)で多くのファイルの名前を変更したいのですが、rename
コマンド用のPerlパッケージがありません。
私のファイルには「T452-102456-0.png」のような名前があり、「-0」の部分を削除したいと思います。私は自分のphp-cliスクリプトを作成することでこのアクションを実行できることを知っていますが、より簡単で高速なソリューションを知りたいのです。
BashまたはKshとmv
を組み合わせることで解決できます。
for f in *.png; do mv -n "$f" "${f/-0}"; done
最初のダッシュの後にもファイル名に「0」があり、「-0」が常にドットの前にある場合は、式にそのドットも含めることができます。
for f in *.png; do mv -n "$f" "${f/-0./.}"; done
しかし、その名前変更ルールは単純なので、til-linuxパッケージのrename
があれば、それもできます:
rename '-0.' '.' *.png
簡単な方法:現在のディレクトリにあるファイルのみ
Zshの場合:
autoload zmv
zmv '(*)-0(.png)' '$1$2'
他のシェルの場合:
for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done
拡張メソッド:現在のディレクトリまたはサブディレクトリ、あるいはその両方のファイル
Zshの場合:
zmv '(**/)(*)-0(.png)' '$1$2$3'
Ksh93の場合:
set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done
上記のbash≥4では、set
コマンドの代わりにshopt -s globstar
を使用します。
他のシェルの場合:
find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
mmv
パッケージがある場合:
mmv '*-0.png' '#1.png'
(最近のバージョンの)rename
のように、これは既存のファイルを上書きしないように合理的な注意を払います。