複数のファイルの中間名を変更する方法

複数のファイルの中間名を変更する方法

次のデジタルファイルがあります。

test01-aaa.txt
test02-bbb.txt
test03-ccc.txt
test04-ddd.txt

名前から aaa、bbb、ccc、ddd 部分を削除する必要があります。私ができる最善は何ですか?コマンドを試しましたが、'rename'どうやってこのように使用できますか?

rename -v "test??-*.txt" "test??.txt" *.txt

次のファイルがあります。

test01.txt
test02.txt
test03.txt
test04.txt

答え1

シェルの単純なループ(これは次の事実を避けます。renameこのユーティリティにはいくつかの競合するバリエーションがあります。):

for name in test??-*.txt; do
    mv "$name" "${name%%-*}.txt"
done

このループは、指定されたパターンに一致する現在のディレクトリのすべての名前を繰り返します。これらの名前ごとに-標準引数置換を使用して、最初の文字列の末尾から文字列の終わりを切り捨てます。置換は、${variable%%pattern}変数値から一致する最長のサフィックス文字列を削除します。次に、代替結果にサフィックスを追加します。patternvariable.txt

bashシェルでは、nullglob一致するファイル名なしで単一の反復が実行されないように、ループを実行する前にシェルオプションを設定する必要があります。

mvGNUシステム(またはmvGNU coreutilsを持つすべてのシステム)にオブジェクトファイルがすでに存在する場合は、そのオブジェクトファイルを使用または-bバックアップできます。--backupそれ以外の場合、-b上記のループは既存のファイルを上書きするように名前の競合を処理します。

関連情報