単一のコマンドまたはスクリプトを使用してUnixで複数のファイルの名前を変更するには? [コピー]

単一のコマンドまたはスクリプトを使用してUnixで複数のファイルの名前を変更するには? [コピー]

次のファイルのリストがあります

aro_tty-mIF-45875564pmo_opt
aro_tty-mIF-45875664pmo_opt
aro_tty-mIF-45875964pmo_opt
aro_tty-mIF-45875514pmo_opt
aro_tty-mIF-45875524pmo_opt

名前を次に変更する必要があります。

aro_tty-mImpFRA-45875564pmo_opt
aro_tty-mImpFRA-45875664pmo_opt
aro_tty-mImpFRA-45875964pmo_opt
aro_tty-mImpFRA-45875514pmo_opt
aro_tty-mImpFRA-45875524pmo_opt

答え1

ほとんどの標準シェルは、シェル変数で単純なテキスト置換を実行する方法を提供します。http://tldp.org/LDP/abs/html/parameter-substitution.html説明は次のとおりです。

${var/Pattern/Replacement}

First match of Pattern, within var replaced with Replacement.

したがって、このスクリプトを使用してすべての適切なファイルを繰り返し、各ファイルの名前を変更します。

for file in aro_tty-mIF-*_opt
do
    mv -i "${file}" "${file/-mIF-/-mImpFRA-}"
done

各名前変更操作を確認する機会を提供するために、-iオプションを追加しました。いつものように、広範な名前の変更または削除を実行する前に、すべてのファイルをバックアップする必要があります。

答え2

Perlがない場合rename

perl -e '
FILE:for $file (@ARGV){
        ($new_name = $file) =~ s/-mIF-/-mImpFRA-/
        next FILE if -e $new_name;
        rename $file => $new_name
}' *_opt

もしあなたならするPerlを使用するとrename

rename 's/-mIF-/-mImpFRA-/' *_opt

答え3

次のような複雑なコマンドを試す前にファイルのバックアップ。あなたはスペルエラー(私のものでもあなたのものでも)によって何が起こるのか決してわかりません。

mv(コメントで要求されたように -rename他の回答で提案されているように、特にファイル名にスペースや奇妙な文字がある可能性がある場合)、どのスタイルを使用する方が安全になる可能性があります。

for f in *_opt; do
    a="$(echo $f | sed s/-mIF-/-mImpFRA-/)"
    mv "$f" "$a"
done

関連情報