Belirli bir uzantıya sahip tüm dosyaları güvenli bir şekilde nasıl silebilirim (örn. .bak
) geçerli dizinden ve tüm alt klasörlerden tek bir komut satırı kullanarak mı? Basitçe, kullanmaktan korkuyorum rm
bir keresinde yanlış kullandığımdan beri şimdi tavsiyeye ihtiyacım var.
Kullanmana bile gerek yok. rm
bu durumda korkuyorsanız. Kullanmak find
:
find . -name "*.bak" -type f -delete
Ama tedbirli kullan. Önce koş:
find . -name "*.bak" -type f
tam olarak hangi dosyaları kaldıracağınızı görmek için.
Ayrıca, emin olun -delete
bu son argüman mı emrinizdeyim. Eğer daha önce koyarsanız -name *.bak argument
, her şeyi silecek.
Görmek man find
ve man rm
daha fazla bilgi için ve ayrıca SE ile ilgili bu soruya bakın:
bulun. -ad "*.bak" -f -print0 | xargs -0 /bın/rm -f yazın
Önce komutu çalıştırın shopt -s globstar
. Bunu komut satırında çalıştırabilirsiniz ve yalnızca o kabuk penceresinde etkili olur. İçine koyabilirsin. .bashrc
ve sonra yeni başlatılan tüm mermiler onu alacak. Bu komutun etkisi **/
geçerli dizindeki ve alt dizinlerindeki dosyaları yinelemeli olarak eşleştirin (varsayılan olarak, **/
aynı anlama geliyor */
: yalnızca anlık alt dizinlerde). Sonra:
rm **/*.bak
(veya gvfs-trash **/*.bak
ya da ne var).
Dosyaları silmek benim için kullanmanız gereken bir şey değil rm
için. İşte bir alternatif:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trashalias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without aliastrash *.bak # trash the files (thus moving them to the trash bin)
Flimm'in yorumlarda belirttiği gibi:
Paket
trash-cli
aynı şeyi yapargvfs-trash
gvfs'ye bağımlılık olmadan.
Böyle:
sudo apt-get install trash-cli
Bunun için bir takma ad yapmanıza gerek yok, çünkü trash-cli
paket bir komut sağlar trash
bu da bizim istediğimizi yapar.
Eliah Kagan'ın kapsamlı yorumlarda açıkça belirttiği gibi, bunu özyinelemeli olarak da yapabilirsiniz find
. Bu durumda takma ad kullanamazsınız, bu nedenle aşağıdaki komutlar yüklediğinizi varsayar trash-cli
. Eliah'ın yorumlarını özetliyorum.:
Bu komut tümünü bulur ve görüntüler .bak
dosyalar ve sembolik bağlar geçerli dizinin veya alt dizinlerinin herhangi bir yerinde veya altında.
find . -name '*.bak' -xtype f
Bunları silmek için bir -exec
ile... trash
komut:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
dosyaları seçer ve dosyalara sembolik bağlar, ancak klasörleri seçmez. Silmek .bak klasörleri de, bu bölümü kaldırın ve kullanın -execdir
. hangi önler cannot trash non-existent
hatalar için .bak
içindeki dosyalar .bak
dizinler:
find . -name '*.bak' -execdir trash {} +
Belirli bir türdeki tüm dosyaları silmek istiyorsanız, ancak geçerli klasörden yalnızca 1 klasör "derin":
find . -maxdepth 2 -name "*.log" -type f -delete
-maksimum derinlik 2 çünkü geçerli dizin "." ilk klasör olarak sayılır.
Hızlı Cevap:
-
Söz konusu ada veya postfix'e sahip tüm dosyaları yinelemeli olarak silme:
find . -name '*.pyc' -type f -delete
-
Söz konusu ada sahip tüm dizinleri yinelemeli olarak silme:
find ~ -path '*/__pycache__/*' -deletefind ~ -type d -name '__pycache__' -empty -delete
Biraz daha az sıkı bir şekilde kontrol edilir, ancak tek bir satırda:
find ~ -path '*/__pycache__*' -delete
[not]:
d
dizin seçeneği ve f
dosya seçeneğidir.
Kullanmadan önce önce bu uzantıya sahip tüm dosyaları listeleyebilirsiniz rm
Örneğin,
ls *.bak
Yalnızca silmek istediğiniz dosyaları alırsanız, aşağıdakileri kullanabilirsiniz: rm
rm *.bak
Dosyaları silmeden önce listeyi kontrol etmek isterseniz, listeyi tekrarlayabilirsiniz.
find . -name "*.bak" -type f | xargs echo rm -rf
Bu, xargs aracılığıyla rm komutuna yönlendirilen arama sonuçlarını listeler.Listeden emin olduktan sonra echo'yu yukarıdaki komutta bırakabilirsiniz.
find . -name "*.bak" -type f | xargs rm -rf