名前変更コマンドが期待どおりに機能しないのはなぜですか?

名前変更コマンドが期待どおりに機能しないのはなぜですか?

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

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削除するだけで必要なファイル名が指定されます。

おすすめ記事