パターンに一致するファイルを削除する


32

ファイル名に数字が含まれ、その後に「x」、数字が少なくとも2回含まれるすべてのサブディレクトリ内のすべてのファイルを再帰的に削除する必要があります。

例:

これらのファイルを削除したい:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

しかし、私はこれらのファイルを削除したくありません:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

どうすればできますか(bashシェルから)

回答:


61

文字列に「数字の後に数字が続くx」が含まれるのは、数字に数字の後に続く場合のみxその後に場合、つまりパターンに一致する部分文字列が含まれる場合[0-9]x[0-9]。したがって、名前がpatternに一致するファイルを削除しようとしています*[0-9]x[0-9]*[0-9]x[0-9]*.jpg

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

findがない場合は-delete、呼び出しrmてファイルを削除します。

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
ありがとうございました!12.000ファイルが2秒で消えました。これにより、手作業の手間が省けました!
mikkelbreum

Windows上のBash -deleteでも-exec rm私のために働いたことはありませんでした。しかし、これは:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
タムリン

2
@Tamlynとを使用-print0しますxargs -0。そうしないと、スペースまたは一重引用符を含むファイル名でコマンドが失敗します。しかし-delete、Windows -exec rm でも動作します。何かがうまくいかない場合、それはそれらの使用によるものではありません。
ジル「SO-悪であるのをやめる」

これはWindowsでも機能しますか?
CodyBugstein

CygwinやGNUWin32などのUnixユーティリティを移植している場合に機能します。明らかに、Windowsではそのままでは機能しません。Windowsには無関係なプログラムが呼び出されるfindことに注意してくださいPATH
ジル「SO-悪であるのをやめる」

0

正しいコマンドは次のとおりです。

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

これにより、「aaa-12x12.jpg」という名前のファイルのみが取得されますが、「aaa-12x12red.jpg」は取得されません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.