.bak
Tek 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 rm
kere yanlış kullandığım için kullanmaktan korkuyorum ve şimdi tavsiyeye ihtiyacım var.
.bak
Tek 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 rm
kere yanlış kullandığım için kullanmaktan korkuyorum ve şimdi tavsiyeye ihtiyacım var.
Yanıtlar:
Eğer rm
korkuyorsan 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 find
ve man rm
SE ile ilgili şu soruya bakınız:
rm *.bak
alt dizinlerde çalışmayacak.
rm *.bak
sadece 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 .bak
tüm içeriği ile biten dizinleri de kaldırır .
-delete
senin 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
-delete
bayrak 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 **/*.bak
sizde ne var).
Dosyaları silmek benim rm
iç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-cli
aynı şeyigvfs-trash
gvfs bağımlılığı olmadan yapar.
Yani:
sudo apt-get install trash-cli
Bunun için bir takma ad kullanmanıza gerek yok, çünkü trash-cli
paket trash
istediğ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 -exec
ile bir ekleyin trash
:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
dosyaları 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 {} +
rm
Bir ş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-cli
aynı şeyi yapar . gvfs-trash
gvfs
find . -name "*.bak" -type f
neyin trash *.bak
silindiğini gösterir gibi görünüyor . Gerçekten demek istediğin bu mu? Dizinleri çöp kutusuyla trash
veya ile birlikte taşıyabilirsiniz gvfs-trash
, ancak trash *.bak
yalnızca .bak
geç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 *.bak
etkilemez . .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 .bak
dosyaları çöker .
. Bir takma ad kullanamaz, bu nedenle yükleyin trash-cli
veya yazın gvfs-trash
. İşte bir örnek. -xtype f
dosyaları 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 existent
iç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 ]:
d
dizin seçeneği ve f
dosya seçeneği.
Git deposundaysanız, şunları kullanabilirsiniz:
git clean -fdx
Bu, izlenmeyen dosyaları ve .gitignore içindeki dosyaları siler.
rm *.bak
?