rm -f için alternatif seçenekler


10

Bir komut satırı çalıştırmak istiyorum:

cd ~/www/tmp/; rm -P 2*

Ancak 2 ile başlayan dosya yoksa hata alıyorum.

-fBununla birlikte , kullanmak istediğimi düşünürdünüz :

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

Ve bunu garip bir şeyler oluyor varsa, ben iptal komutu tercih ediyorum permissions- dosya hakkında bakım. Sadece 'yok' hatalarını bastırmak istiyorum.

'Rm hataları' ile başka sorulara baktım ve (bu tür) ilgili görünen bu iki tane buldum:

Dosyaları ve dizinleri adlarına göre silin. Böyle bir dosya ya da dizin yok

Ancak, bu sorunun cevaplarında olan her şeyi anlamıyorum ve buna ihtiyacım olduğunu bilmiyorum?

touchBu soruya önerilen kesmek:

Bir dosya eksik olduğunda rm bildirilmiyor mu?

Performans vuruşunu önemsediğimi düşünmediğim için işe yarıyor gibi görünüyor (ancak ne tür bir performans isabeti alırsınız? - Yani: Bu makul derecede ölçeklenebilir bir teknik mi, yoksa sadece çok kötü alışkanlıklar mı öğreniyorum?)

if-thenKomut satırında nasıl yapacağımı bilmiyorum .

Basit bir komut satırı cut-n-paste temizleme için başka seçenekler var mı?

Davam find -deleteiçin daha iyi çalışır mıydı ? Öyleyse neden?


söz konusu hata:

rm: 2*: No such file or directory

1
Hata, kabuğunuzdan değil rm, bu yüzden ne olduğunu söylemeniz gerekir.
Michael Homer

zshİnteraktif kabuğunuz olarak mı kullanıyorsunuz ? No matches foundHata mı alıyorsunuz ?
Kusalananda

3
@MichaelHomer Hayır, hata rm'den. Kabuk sadece 2*bir dosya listesine genişletmek yerine dizeye rm'ye geçti . Söz konusu hataya bakın: rm şikayet ediyor, sh / bas / zsh / ... değil
doneal24

Yanıtlar:


13

Sadece aramak için rm -Piçin mevcut isimleri bir dizinde bir desen eşleşmesi (ancak aşağıda) düzenli dosyaları:

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

Örneğin,

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

Yalnızca dizin olmayanları eşleştirmek için ! -type dyerine kullanın -type f. Fark, ! -type ddaha geniş bir dosya türü aralığı için (sembolik bağlantılar, adlandırılmış yöneltmeler, soketler vb.)

Eğer dosyalar üzerinde bazı koşullar bulundu sorulmasını istiyorum olduğundan, gerektiği değil kullanmak -deleteyerine -exec rmolarak bu eserlerin beri rm -f.

Alt dizinlere özyinelemeli olarak bakmak -maxdepth 1için kaldırın find.


3
Sanırım ! -type ddaha yakın olsa da rm 2*?
muru

Yani, bu işlevselliği elde etmek için -P eklemeliyim ?:find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
user3082

@ user3082 Evet, siz de kullanmak istediğinizi unuttum -P.
Kusalananda

Teşekkürler muru, aslında istiyorum -type f, ama böyle nasıl rmhareket edeceğini bilmiyordum - bu yüzden @ Kusalanada'nın önerisi yerinde ve farklılaşma / açıklama öğrenme için harika.
user3082

@ user3082 muhtemelen kabuğunuzun genişletilmiş globbing'ini kullanmanız gerekir (örn rm 2*(.). zsh cinsinden).
muru
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.