名前に「WIDTHxLENGTH」を含むディレクトリのファイルを繰り返し削除します。

名前に「WIDTHxLENGTH」を含むディレクトリのファイルを繰り返し削除します。

thumbnail-name_WIDTHxLENGTH.{jpg,png}サブディレクトリを含むディレクトリがあり、名前がwhereWIDTHLENGTH、すべて10進数のbox-image-150x150.jpg画像を削除したいと思いますcircle-image-320x320.png。したがって、デフォルトではx数字を含むjpg / pngです。

答え1

# Old school way for directory-walking: find (emacs regex; use `(jpg|png)` on BSD find)
# use -iregex for case-insensitive
find some/dir -regex '.*[0-9]+x[0-9]+.\(jpg\|png\)' -delete
# ksh93, zsh & bash: globstar + brace expansion + extglob
# for ksh, use `set -o globstar` first; for bash, use `shopt -s globstar extglob nullglob` first.
# TODO: Too lazy to write zsh cshnullglob and case-insensitive globs
rm -- **/*[0-9]x+([0-9]).{jpg,png}

答え2

「正規表現」という用語は、(通常)コマンドラインからファイルを選択するためには適用されません。1   技術用語は、ワイルドカード、パターンマッチング、またはワイルドカード拡張とも呼ばれるパス名拡張です。あなたが言ったことに基づいて、最初の答えの試みは次のとおりです。

rm -- *[0-9]x[0-9]*

次の名前で構成されている現在のディレクトリ内のすべてのファイルを削除します。

  • 任意(*)の後に
  • 数字([0-9])、その後に
  • この手紙xの後に
  • もう一つの数字([0-9])、その後に
  • 何( *)。

--で終わる名前からあなたを守ることができます-。そうすることを強くお勧めします。

ls -ld -- *[0-9]x[0-9]*

まず、どのファイルが一致して削除されているかを確認してください。一致するファイルが目的のファイルではない場合は、少なくとも1つの3桁の数字と異なる3桁の数字を含むファイルのみを*[0-9][0-9][0-9]x[0-9][0-9][0-9]*取得します。xおよび/またはその拡張子を持つファイルにコマンドを制限するために最後に.jpg追加(つまり使用)してから、コマンドを繰り返します。または以下を使用してください。*[0-9]x[0-9]*.jpg.png

RM-私-- *[0-9]x[0-9]*

rm各ファイルを確認するように求められます。

「ディレクトリを含むディレクトリです。すべてjpgがあります。」ディレクトリツリーを検索する必要がある場合、1つの方法は次のように入力することです。

shopt -u globstar

次に、**/ワイルドカードを追加します。たとえば、次のようになります。

rm -i -- **/*[0-9]x[0-9]*

サブディレクトリツリーを検索する別の方法は次のとおりです。

find . -name "*[0-9]x[0-9]*" -type f -exec rm -i -- {} +

次のように入力して、このコマンドを「プレビュー」できます(どのファイルが一致するかを確認)。

find . -name "*[0-9]x[0-9]*" -type f -print

繰り返しますが、一致するファイルが多すぎる場合は、数値を追加したり拡張子を追加したりできます。

メモ:

  • コマンドはワイルドカード文字を引用する必要がありますfind。他のコマンドではワイルドカード文字を引用できません。
  • このfindコマンドは、名前が次に始まるファイルを自動的に検索します。.。あなたshopt -s dotglobが最初に入力しない限り、誰もそうしません。
  • このfindコマンドは通常のファイルでのみ機能します。-type f他のファイルの名前に。しかし、前述したように、最初に実行して出力を再確認するか、入力する前に使用して考えてください。numberxnumberrmlsrm -iy

_________
1には find正規表現と一致する機能があり、テストされていますが、-regexこの問題を解決するためには必要ありません。

答え3

xargs で find を使用します。

find / -name "*[0-9]*x*[0-9]*.jpg" | xargs /bin/rm -f

編集する:

find / -name "*[0-9]x[0-9]*.jpg" | xargs /bin/rm -f

または、以下のコメントで提案されている「authur2e5」と同じです。

find some/dir -name "*[0-9]x[0-9]*.jpg" -delete

関連情報