thumbnail-name_WIDTHxLENGTH.{jpg,png}
サブディレクトリを含むディレクトリがあり、名前がwhereWIDTH
でLENGTH
、すべて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
他のファイルの名前に。しかし、前述したように、最初に実行して出力を再確認するか、入力する前に使用して考えてください。numberxnumber
rm
ls
rm -i
y
_________
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