バッチファイル名から特定の番号を削除

バッチファイル名から特定の番号を削除

名前には、21から29までの数字を含むファイルのバッチがあります。何百ものファイルを手動で削除したくないので、端末を使ってみました。

for f in *; 
do for x in {21..29};
rename=`echo "$f" | sed 's/\$x//'`
mv "$f" "$rename"; done;

しかし、何も起こりませんでした。一部のファイルを含むテストフォルダで楽しんで「$ x」を文字「a」に置き換えると、最初の文字「a」は実際には削除されますが、数字では機能しません。私は何が間違っていましたか?

どんな助けでも本当に感謝します!ありがとうございます!

ベストアンサー1

一重引用符内にあると、コマンドは拡張されないため、コマンドsedは機能しません。$xしかし、実際には仕事に間違ったツールを使用しています。

シェルが利用可能な場合は、そのシェルに切り替えて、貢献したモジュールと組み込みの数値グローブ範囲をzsh活用することをお勧めします。zmv<m-n>

前任者。与えられた

 % ls -d -- *.mp4
'video snap 02 car 23 December.mp4'  'video snap car 23 December.mp4'

それから

 % autoload -Uz zmv

 % zmv -n '(*) <21-29> (*.mp4)' '$1 $2'
mv -- 'video snap 02 car 23 December.mp4' 'video snap 02 car December.mp4'
mv -- 'video snap car 23 December.mp4' 'video snap car December.mp4'

-n交換が正常に機能すると思われる場合は削除してください(対処なし)。


zshが利用できない場合は、数値範囲を単純なシェルパターンで表すことができるので、bashで次のことができます。

$ for f in *2[123456789]*.mp4; do echo mv -n -- "$f" "${f/ 2[123456789]}"; done 
mv -n -- video snap 02 car 23 December.mp4 video snap 02 car December.mp4
mv -n -- video snap car 23 December.mp4 video snap car December.mp4

この場合はecho、実際に名前を変更したファイルを削除してください(-n名前の競合が上書きされるのを防ぐため、アーカイブしてください)。

おすすめ記事