正規表現を使用して多数のファイル名を変更するには?

正規表現を使用して多数のファイル名を変更するには?

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

私のファイル名は「T452-102456-0.png」と同じで、「-0」部分を削除したいと思います。私は自分のphp-cliスクリプトを書くことでこれを行うことができることを知っていますが、より簡単で迅速な解決策を知りたいです。

答え1

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

しかし、名前変更ルールは簡単なので、次renameのように始めるとユーティリティLinuxパッケージでは、次のようにすることもできます。

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

答え2

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

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 globstar代わりにcommandを使用してくださいset

他のシェルの場合:

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

答え3

OSXのフィッシュシェルでは:

for f in *.png; mv -n $f (basename $f -0.png).png; end

魚の皮:https://fishshell.com/

答え4

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

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

(最新バージョン)と同様に、rename既存のファイルを上書きしないように合理的な措置を講じます。

関連情報