次のファイルがあります。
1_suffix.txt
2_suffix.txt
3_suffix.txt
削除したいです_suffix.txt
。というコマンドを見つけて、rename
次のように使用しました。
まず、次のことを試してください。
rename -v 's/*_suffix.txt$/\.txt/' *.png
動作しませんでしたが、次のことを試しました。
rename -v 's/_suffix.txt$/\.txt/' *.png
効率的。
2番目の正規表現が間違っているようですが、なぜ動作しますか?
私はlsを試してみます:
ls _suffix.txt # not worked
ls *_suffix.txt # worked
ベストアンサー1
このrename
コマンドは、グローバルパターンではなく正規表現を使用します。有効なグローバルパターンですが、*foo
有効な正規表現ではありません。*
「0以上」を意味しますが、0以上も指定する必要があります。何。 「すべての文字」の場合は、以下を使用してください.
。
s/.*_suffix\.txt$/.txt/
今、次の問題は、これがs/_suffix.txt$/\.txt/' *.png
決して機能しないということです。rename
名前が.で終わるすべてのファイルの名前を変更するように指示します_suffix.txt
が、名前が.で終わるファイルに対してこれを行うように指示しますpng
。これが*png
(正規表現ではなくglob)の意味です。
私の考えでは、あなたが本当に欲しいものは次のとおりです。
rename 's/_suffix//' *suffix.txt
これは何も置き換えずに_suffix
削除するだけで必要なファイル名が指定されます。