次の名前の一連のファイルを含むフォルダーがあります。
prefix_1234_567.png
prefix_abcd_efg.png
出力が1つになるように、1つのアンダースコアと中間のコンテンツをバッチで削除したい
prefix_567.png
prefix_efg.png
感謝しますが、完全な説明ではありません: ターミナルを使用してファイルの名前を一括変更するにはどうすればよいですか?OS Xターミナルでファイルの名前を一括変更する正規表現
特定のケースでは、次のbash
コマンドを使用できます(bash
はmacOSのデフォルトのシェルです):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
注:ファイル名が-
で始まる可能性がある場合は、それらの前に--
を配置してください[1]:mv -- "$f" "${f/_*_/_}"
注:ドライランを実行するために、echo
がmv
の前に追加されます。削除して実際の名前変更を実行します。
コマンドラインから実行するか、スクリプトで使用できます。
"${f/_*_/_}"
はbash
parameter expansion のアプリケーションです:(最初の)サブストリング一致パターン_*_
はリテラル_
に置き換えられ、名前から中間トークンを効果的に切り取ります。_*_
はpattern(グロビングにも使用されるワイルドカード式)であり、regular expressionではないことに注意してください。 (パターンについて学習するには、man bash
を実行し、Pattern Matching
を検索してください)。ファイルの名前を頻繁に変更する場合は、 Perlベースの rename
utilityなどの専用ツールのインストールを検討してください。 macOSでは、次のように一般的なパッケージマネージャー Homebrew を使用してインストールできます。
brew install rename
以下は、rename
を使用した上部のコマンドと同等です。
rename -n -e 's/_.*_/_/' *.png
繰り返しますが、このコマンドは予行演習を実行します。 -n
を削除して、実際の名前変更を実行します。
bash
ソリューションと同様に、s/.../.../
はテキスト置換を実行しますが、bash
とは異なり-trueregular expressionsが使用されます。[1]ほとんどのユーティリティでサポートされている特殊な引数--
の目的は、後続の引数がoperands(値)として扱われることを示すことです。looklikeoptions-
で始まるため、 Jacob C。 ノート。
ファイルの名前を変更するには、rename
ユーティリティを使用できます。
brew install rename
たとえば、現在のディレクトリのすべてのファイル名の検索文字列を変更するには:
rename -nvs searchword replaceword *
「n」パラメーターを削除して、変更を適用します。
詳細:man rename
Sedを使用できます:
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv
結果:
prefix_567.png prefix_efg.png
*最初にドライランを実行するには、最後のmv
をecho
に置き換えます
説明:
次のようなファイルのバッチがありました:be90-01.pngダッシュをアンダースコアに変更する必要がありました。私はこれを使用しましたが、うまくいきました:
for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
rename
を使用してbrew
コマンドをインストールできます。 brew install rename
を実行して使用するだけです。
mmv
を使用する
mmv '*_*_*' '#1_#3' *.png
これを試して
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done
別の方法を次に示します。
for file in Name*.png; do mv "$file" "01_$file"; done