次の名前の一連のファイルを含むフォルダがあります。
prefix_1234_567.png
prefix_abcd_efg.png
出力が次のようになるように、1つのアンダースコアと中間のコンテンツを一括削除したいと思います。
prefix_567.png
prefix_efg.png
関連するが完全に説明的ではない:
_*_
空白で置き換えるオートマトンワークフローを作成できます。
次の名前の一連のファイルを含むフォルダがあります。
prefix_1234_567.png
prefix_abcd_efg.png
出力が次のようになるように、1つのアンダースコアと中間のコンテンツを一括削除したいと思います。
prefix_567.png
prefix_efg.png
関連するが完全に説明的ではない:
_*_
空白で置き換えるオートマトンワークフローを作成できます。
回答:
特定のケースでは、次のbash
コマンドを使用できます(bash
macOSのデフォルトのシェルです)。
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
注:ファイル名がで始まる可能性がある場合は-
、--
その前に配置してください[1]:
mv -- "$f" "${f/_*_/_}"
注:echo
はmv
、予行演習を実行するためにに付加されています。削除して実際の名前変更を実行します。
コマンドラインから実行するか、スクリプトで使用できます。
"${f/_*_/_}"
bash
パラメータ展開のアプリケーションです。(最初の)部分文字列の一致パターン_*_
がliteral _
に置き換えられ、名前から中央のトークンが効果的に削除されます。_*_
、パターン(グロビングにも使用されるワイルドカード表現)であることに注意してください(パターンについて学習し、を実行して検索します)。man bash
Pattern Matching
ファイルの名前の一括変更を頻繁に行う場合は、Perlベースのrename
ユーティリティなどの専用ツールのインストールを検討してください。macOSでは、一般的なパッケージマネージャーのHomebrewを使用して次のようにインストールできます。
brew install rename
以下は、先頭にあるコマンドと同等のものですrename
。
rename -n -e 's/_.*_/_/' *.png
繰り返しますが、このコマンドは予行演習を実行します。削除-n
して実際の名前変更を実行します。
bash
ソリューションと同様に、s/.../.../
テキスト置換を実行しますが、-とは異なりbash
-真の正規表現が使用されます。[1] --
ほとんどのユーティリティでサポートされている特別な引数の目的は、Jacob C.が指摘しているように、後続の引数がで始まるためにオプションのように見える場合でも、後続の引数をオペランド(値)として扱う必要があることを通知することです。-
.*
-> $1
)を使用した例。例:Rename Foo bar S01E01 biz baz.ext
to S01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
予行演習に使用するアイデアが大好きです。先端をありがとう!
brew install rename
ファイルの名前を変更するには、rename
ユーティリティを使用できます。
brew install rename
たとえば、現在のディレクトリにあるすべてのファイル名の検索文字列を変更するには:
rename -nvs searchword replaceword *
「n」パラメーターを削除して、変更を適用します。
より詳しい情報: man rename
OS X
GNU bash
(x86_64-apple-darwin)のバージョンには、名前変更ユーティリティは含まれていません。
brew install rename
rename -vs GLYCOPHORIN GLYCC *
と、450以上のファイルの名前が自動的に変更されます。そして、超高速。
あなたはsedを使うことができます:
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv
結果:
prefix_567.png prefix_efg.png
*最初に予行演習を行うにはmv
、最後にecho
説明:
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(echo
実際の名前変更は削除してください)。
使用する mmv
mmv '*_*_*' '#1_#3' *.png
sudo apt-get install mmv
。
brew install mmv
です。