Dosya adlarının öäüß gibi özel karakterler içerdiği bir dizin ağacından tüm dosyaları nasıl silebilirim


2

Yedekleme programımla ilgili bir sorunum var bu, dosya isminin özel karakterler içerdiği belirli bir dizin ağacındaki tüm dosya ve klasörleri silmem gerektiği anlamına geliyor, benim durumumda öäüß ve bunların sermaye eşdeğerleri gibi.

Terminali kullanarak bunu yapmaktan çok mutlu olurum ama denediğim hiçbir komut dosyalardan hiçbiriyle eşleşmedi. Birisi bu dosyaları eşleştirmek için kullanabileceğim bir komut önerebilir mi?

Mesela denedim

find -name *ü*

ancak dosyaların hiçbiri eşleşmedi. Herhangi bir yardım takdir edilecektir.


Parametreyi tırnak içine almayı denediniz mi: find -name ’*ü*' -print ?
nohillside

Bulucu ve akıllı klasörler, tüm dosyaları bir alt klasörde veya bir ciltte seçmenize ve bunları grafiksel bir biçimde büyük bir kolaylıkla çöpe atmanıza izin vermelidir. Bu işlemi gerçekleştirmek için terminal kullanmanızın bir nedeni var mı? (Karakter listesinin 4'ten 10'a daha fazla hale geldiğini varsayalım - bu şimdi düşünmek için iyi bir sebep olurdu.)
bmike

1
@patrix, evet Tırnak kullanmaya çalıştım - bu dosya veya klasörlerle de eşleşmiyor. Finder'ı (@bmike) kullanmak hiçbir dosya veya klasörle eşleşmiyor. Özel karakterler aramamın nedeni olduğuna inanıyorum, çünkü normal karakterler aradığımda her iki durumda da dosyalar / klasörler eşleşiyor.
Ham

Yanıtlar:


1

bir biraz tehlikeli çözüm şu, komut satırından:

find . -type f ! -regex '.*/[ -.0-~]*' -exec rm {} +

Yalnız değiştirin . İlk önce ilgili dizine geçmediyseniz, üst dizinin ismiyle. Güvende olmak için önce kısa komutu deneyin

find . -type f ! -regex '.*/[ -.0-~]*'

ve yalnızca silmek istediğiniz dosyaları listelediğinden emin olun. Buradaki normal ifade (regexp veya regex), eğik çizgide biten herhangi bir yol adıyla ve ardından hariç yazdırılabilir ASCII karakterlerinin herhangi bir kombinasyonu ile eşleşir /boşluk karakterleri ilk ~ son . ve 0 kuşatma / ASCII dizisinde.

Birçoğunun arasında bir uyarı: Mevcut yerel ayarınızın karakterlerin harmanlama sırasını değiştirip değiştiremeyeceğinden emin değilim ve dolayısıyla regexp'in anlamını değiştirebilir. Öyle sanmıyorum, ama öyleyse, komutları olduğu gibi çalıştırma

LC_COLLATE=C find …

tehlikeyi ortadan kaldırmalı.

Yine bir başka uyarı: Lütfen denemeden önce bir yedeğiniz olduğundan emin olun. Yanlış yaparsanız, herhangi bir veri kaybı için suçu almayacağım. Komut satırı, kendinizi ayağınızdan vurmak için harika bir araçtır! Bazen sadece yanlış yerleştirilmiş bir alan felakete neden olabilir. (Bu durumda, örneğin, sol parantez ölümcül olduktan sonra tek boşluk bırakılması.)


Çok teşekkürler @Harald, senin regex bir tedavi çalıştı. Sonunda aşağıdaki komutu kullandım: find . -type f ! -regex '.*/[ -.0-~]*' -delete daha önce kontrol ettikten sonra -delete doğru dosyaların eşleştiğini!
Ham

1

Sorununuz hem terminaldeki hem de Finder'daki karakterlerin görünmesiyle ilgili görünüyor. Kaldırmak istediğiniz herhangi bir dosyanın bulunduğu dizine girmeyi ve ls UNIX ortamındaki dosya adının Bulucununkiyle aynı olup olmadığını bulmak için.

Yukarıda önerilen çözümü biraz kafa karıştırıcı buluyorum. Yani find komutunun sürümüm iki adımda gerçekleşir:

find . -name "*ü*" -print
Bu, eşleşen dosyaları basar.

find . -name "*ü*" -delete
Bu, önceki çıktıda ihtiyacınız olan dosyaların hiçbirinin listelenmediğini kontrol ettikten sonra eşleşen dosyaları siler.

Ayrıca, burada, @Harald Hanche-Olsen’e göre, burada yer alan çeşitli LC_ * ortam ayarlarını ve ne tür bir etki göz önünde bulundurmalısınız. üzerinde find Komut. Terminal ekran kodlama ayarlarından bahsetmiyorum bile.


@İsmail yanıtı için teşekkürler, ancak bu bulma komutları maalesef dosyalarımla eşleşmedi.
Ham

Finder ve Terminal.app'da dosya adı tutarlılığını kontrol ettiniz mi?
ismail

0

'Daha iyi bir Bulucu Yeniden Adlandır' kullanarak başka bir yol deneyebilirsiniz bağlantı ). Önizleme Bölmesi, Hazır Ayarlar ve Çok Adımlı İşlemlerden yararlanır. Deneme için ücretsiz Deneme sürümünü kullanabilirsiniz.

Screenshot


Teşekkürler @ J.C. iyi bir program gibi görünüyor, ama sonunda gerek yoktu!
Ham
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.