eşleşen deseni sil


32

Dosya adının ardından bir 'x' ardından bir sayı ve ardından en az iki kez bir sayı içerdiği tüm alt dizinlerdeki dosyaları tekrar tekrar kaldırmam gerekiyor.

Örnek:

Bu dosyaları kaldırmak istiyorum:

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

Ancak bu dosyaları kaldırmak istemiyorum:

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

Bunu nasıl yapabilirim (bash kabuğundan)

Yanıtlar:


61

Bir dize, xeğer sadece bir rakam ve ardından xbir rakam izlerse, yani desene uyan bir alt dize içeriyorsa , bir sayı ve ardından bir sayı takip eder [0-9]x[0-9]. Yani adı kalıba uyan dosyaları silmek istiyorsun *[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

Eğer findyoksa , dosyaları silmek için -deletearayın rm.

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

2
Teşekkür ederim! 12.000 dosya gitti 2 saniye. Bu bana biraz el emeği kazandırdı!
mikkelbreum

Ne -deletede -exec rmWindows'ta Bash'de benim için çalıştı. Ama bu yaptı:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn

2
@Tamlyn Kullanın -print0ve xargs -0, aksi takdirde komut, boşluk veya tek tırnak içeren dosya adlarıyla başarısız olur. Ama -deleteve -exec rm do Windows üzerinde çalışmalarını. Bir şey işe yaramazsa, kullanımlarından dolayı değildir.
Gilles 'SO- kötülük yapmayı kes'

Bu, Windows ile de çalışacak mı?
CodyBugstein

Cygwin veya GNUWin32 gibi bir Unix yardımcı programları bağlantı noktanız varsa işe yarar. Açıkçası Windows'taki kutunun dışında çalışmaz. Windows'un adı verilen ilgisiz bir program findolduğundan emin olun, bu nedenle Unix yardımcı programlarının ilk girdiğinden emin olun PATH.
Gilles 'SO- kötülük olmayı'

0

Doğru komut:

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

bu yalnızca 'aaa-12x12.jpg' adındaki dosyaları alır, ancak 'aaa-12x12red.jpg'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.