Bashを使用してファイル名を一括変更する

Bashを使用してファイル名を一括変更する

.-.ファイル名を一括で変更する必要があります。.

目標:file.-.txtfile.txt

rename 's/.-./.' *.txt

動作しません。何が問題なの?

ベストアンサー1

Perl バージョンを使用しない理由は、Perl バージョンを使用している場合、rename代替式の末尾の欠落によってエラーが発生するためです。Substitution replacement not terminated at (eval 1) line 1./

したがって、次の構文を使用する必要があります。「他」rename

rename -vn -- '.-.' '.' *.txt

この特別な場合にはソースやターゲットパターンにシェル glob 文字(など)がないので実際に引用する必要はありませんが*、良い習慣なのでとにかくここで引用しました。

状況に応じた結果が得られた場合は、-v(verbose)と(no action)のいずれかまたは両方を削除してください。すべての項目をに置き換えるオプションが-n追加されました。たとえば、代わりに名前を変更するか(続きの名前をに変更する)、astエントリを変更します。-aa.-..foo.-.bar.-.txtfoo.bar.txtfoo.bar.-.txtfile.-.-.txtfile.-.txt-ll

不思議なことに、このrenameコマンドはs/.-./.(例えば、対応する7文字)をソースパターンとして使用し、*.txtglobで最初に一致するファイル名をターゲットパターンとして使用します。その後、ソースパターンをglobの残りの各ファイルと一致させようとします*.txt。明らかに、これはどんなものとも一致せず、構文エラーがないため、メッセージは出力されません。

おすすめ記事