正規表現を使用して多くのファイルの名前を変更するにはどうすればよいですか?


20

Mac OS X(10.7.2)で多くのファイルの名前を変更したいのですが、renameコマンド用のperlパッケージがありません。

私のファイルには「T452-102456-0.png」のような名前があり、「-0」の部分を削除したいです。独自のphp-cliスクリプトを記述することでこのアクションを実行できることは知っていますが、より簡単で高速なソリューションを知りたいと思います。


「多くのpdfファイル」と「私のファイルは「T452-102456-0.png」のような名前を持っています」との間に論理的な矛盾はありませんか?
マナトワーク

ああ...ファイルの種類は関係ありませんが、本当です^^。編集、コメントありがとうございます=)
ラファエル

回答:


21

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

しかし、その名前変更ルールは単純なのでrenameutil-linuxパッケージから持っている場合、それもそれを行います:

rename '-0.' '.' *.png

完璧に機能します。ありがとうございます=)
ラファエル

3

簡単な方法:現在のディレクトリ内のファイルのみ

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の場合shopt -s globstarsetコマンドの代わりに使用します。

他のシェルの場合:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

zshをインストールするもう1つの大きな理由:).... zmv
danidee


0

mmvパッケージがある場合:

mmv '*-0.png' '#1.png'

(最近のバージョン)と同様にrename、これは既存のファイルの上書きを避けるために合理的な注意を払います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.