そのため、入れ子になったフォルダと特定の時点の画像を含むディレクトリがあります.png
。
イメージ名は「letters_numbers_numbers_letters.png」のように指定され、数字の間の下線を削除したいと思います。
というファイルがあり、a_1_2_b.png
名前をに変更したいとしa_12_b.png
ましょう。次のようなものを使用する必要があります。
find . -name "*[0-9]_[0-9]* -type f -exec bash -c <enter_code here>`
しかし、この特定の下線を削除する方法を指定する方法がわかりません。触れたくない下線が2つあることを覚えておいてください。
よろしくお願いします!
ベストアンサー1
perl
■バリエーションの1つを使用してくださいrename
。例えば、それ(rename
Debianシステムのソフトウェアパッケージに似ています):
LC_ALL=C find . -name '*[0-9]_[0-9]*' -type f -exec rename -n -d '
s/(?<=\d)_(?=\d)//g' {} +
(満足したら削除してください-n
(模擬実行))。
これにより、zsh
次のことができます。
autoload -Uz # best in ~/.zshrc
zmv -n '(**/)(*[0-9]_[0-9]*)(#qD.)' \
'$1${2//(#m)[0-9][_0-9]#[0-9]/${MATCH//_}}'
zsh globにはPerlのツアー正規表現演算子と同等のものがないため、少し複雑です。
これは_
、すべての一般的なファイル名から数字で囲まれたすべてのsを削除します(たとえば、dir_1_2_3/file_1_2_foo_22_3_4_bar
ファイル名をに変更します)。dir_1_2_3/file_12_foo_2234_bar
_
このパターンに従う一般的なファイルのうち、2番目のファイルのみを削除するには、次の手順をletters_digits_digits_letters.png
実行します。
zmv -n '(**/)([[:alpha:]]##_<->)_(<->_[[:alpha:]]##.png)(#qD.)' \
'$1$2$3'