.bakTek bir komut satırı kullanarak belirli bir uzantıya sahip tüm dosyaları (örn. ) Geçerli dizinden ve tüm alt klasörlerden nasıl silerim ? Basitçe, bir rmkere yanlış kullandığım için kullanmaktan korkuyorum ve şimdi tavsiyeye ihtiyacım var.
.bakTek bir komut satırı kullanarak belirli bir uzantıya sahip tüm dosyaları (örn. ) Geçerli dizinden ve tüm alt klasörlerden nasıl silerim ? Basitçe, bir rmkere yanlış kullandığım için kullanmaktan korkuyorum ve şimdi tavsiyeye ihtiyacım var.
Yanıtlar:
Eğer rmkorkuyorsan bu durumda kullanmana bile gerek yok . Kullanım find:
find . -name "*.bak" -type f -delete
Ancak önlemle kullanın. İlk önce koş:
find . -name "*.bak" -type f
tam olarak hangi dosyaları kaldıracağınızı görmek için.
Ayrıca, komutunuzdaki son argüman olduğundan emin olun-delete . Daha önce koyarsanız -name *.bak argument, her şeyi silecektir .
Daha fazla bilgi için bakınız man findve man rmSE ile ilgili şu soruya bakınız:
rm *.bakalt dizinlerde çalışmayacak.
rm *.baksadece geçerli dizinde .bak ile biten tüm dosyalar silinir. Ayrıca, alt dizinlerde, globs'la dolaşmanız için gerekenleri yapmak, -r seçeneğini kullanın veya find örneğini kullanın.
rm -r *.bak! Ayrıca .baktüm içeriği ile biten dizinleri de kaldırır .
-deletesenin komuta son argümandır. Argümandan önce koyarsanız -name *.bak, her şeyi silecektir.
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
-deletebayrak kullanmanın bir avantajı olduğunu sanmıyorum find. GNU kılavuzları girişinde bulunan dosyaları silmek için daha fazla bilgiyi bulabilirsiniz .
İlk önce komutu çalıştırın shopt -s globstar. Bunu komut satırından çalıştırabilirsiniz ve yalnızca bu kabuk penceresinde etkili olur. Onu içine koyabilirsin .bashrc, ve sonra yeni başlatılan tüm mermiler alacak. Bu komutun etkisi **/, geçerli dizindeki ve alt dizinlerindeki eşleşen dosyaları yinelemeli olarak eşleştirmektir (varsayılan olarak, şu **/anlama gelir */: yalnızca yalnızca alt dizinlerde). Sonra:
rm **/*.bak
(veya gvfs-trash **/*.baksizde ne var).
Dosyaları silmek benim rmiçin kullanmanız gereken bir şey değil . İşte bir alternatif:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
Flimm'in dediği gibi yorumlar:
Paket
trash-cliaynı şeyigvfs-trashgvfs bağımlılığı olmadan yapar.
Yani:
sudo apt-get install trash-cli
Bunun için bir takma ad kullanmanıza gerek yok, çünkü trash-clipaket trashistediğimizi yapan bir komut veriyor .
Eliah Kagan, geniş yorumlarda açıkça ifade ettiği gibi, bu özyinelemeli kullanımı da yapabilirsiniz find. Bu durumda bir takma ad kullanamazsınız, bu nedenle aşağıdaki komutlar yüklediğinizi varsayar trash-cli. Eliah'ın yorumlarını şöyle özetliyorum:
Bu komut .bak, geçerli dizinde veya alt dizinlerinde veya altında bulunan tüm dosyaları ve sembolik bağları bulur ve görüntüler .
find . -name '*.bak' -xtype f
Onları silmek için, bir komut -execile bir ekleyin trash:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype fdosyaları ve sembolik dosyaları dosyalara seçer, ancak klasörleri seçmez. .Bak klasörlerini de silmek için, o bölümü kaldırın ve dizinlerdeki dosyalar için hataları -execdirönleyen kullanın :cannot trash non-existent.bak.bak
find . -name '*.bak' -execdir trash {} +
rmBir şeyi silmek için kullanmayın " tartışmalı bir ifadedir, ancak bazı şeyleri geri almanıza izin verecek bir şey kullanmanın daha akıllıca olduğunu kabul etmek zorundayım.
trash-cliaynı şeyi yapar . gvfs-trashgvfs
find . -name "*.bak" -type fneyin trash *.baksilindiğini gösterir gibi görünüyor . Gerçekten demek istediğin bu mu? Dizinleri çöp kutusuyla trashveya ile birlikte taşıyabilirsiniz gvfs-trash, ancak trash *.bakyalnızca .bakgeçerli dizinde bulunan ve adları biten ve sonundaki dosya ve dizinleri taşır . Kabuk genişler *.bak, bu nedenle kendileri adlandırılmayan alt dizinlerdeki dosyaları trash *.baketkilemez . .bak.bak
ls *.bak(sanırım demek istediğin) çöpleri listeler trash *.bak. altındaki find . -name '*.bak' -xtype f -exec trash {} +tüm .bakdosyaları çöker .. Bir takma ad kullanamaz, bu nedenle yükleyin trash-cliveya yazın gvfs-trash. İşte bir örnek. -xtype fdosyaları ve sembolik dosyaları dosyalara seçer, ancak klasörleri seçmez. .bak Klasörleri de silmek için find . -name '*.bak' -execdir trash {} +, dizin içindeki dosyalar cannot trash non existentiçin hataları önleyen kullanın . Lütfen cevaplarınızda bunlardan herhangi birini kullanmaktan çekinmeyin. .bak.bak
Belirli bir türdeki tüm dosyaları, ancak geçerli klasörden yalnızca "derin" bir klasörü silmek istiyorsanız:
find . -maxdepth 2 -name "*.log" -type f -delete
- maxdepth 2, çünkü geçerli dizin " . " ilk klasör sayılır.
Kabul edilen ad veya posta eki olan tüm dosyaları tekrar tekrar silin:
find . -name '*.pyc' -type f -delete
Kabul edilen isimdeki tüm dizinleri tekrar tekrar silin:
find ~ -path '*/__pycache__/*' -delete
find ~ -type d -name '__pycache__' -empty -delete
Biraz daha az sıkı kontrol edilir, ancak tek bir satırda:
find ~ -path '*/__pycache__*' -delete
[ NOT ]:
ddizin seçeneği ve fdosya seçeneği.
Git deposundaysanız, şunları kullanabilirsiniz:
git clean -fdx
Bu, izlenmeyen dosyaları ve .gitignore içindeki dosyaları siler.
rm *.bak?