Üst klasörü silmeden alt klasörleri sil


15

Bu tip dir yapısı için:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

rm -rf /config/filesgroupsÜst klasörü ve tüm alt klasörleri silmek için kullanabileceğimi biliyorum ...

ama sadece silmek istediğiniz /filegroupA, /filegroupBvb ve silinmez/config/filegroups


13
Rm -rf / config / filesgroups / * kullanmanın bir sorunu var mı?
dsmsk80

3
Ya da belki rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan

@dsumsky Varsayılan olarak bash'.' içermez. yol adı genişlemesindeki klasörler. Hangisi istenebilir veya istenmeyebilir. Kendimi yapmam shopt -s dotglobiçinde .bashrcolduğu düzeltme için. Birisinin yararlı bulabileceği bir yan not;).
Miroslav Koškár

Bu iş sizin için işe yaradı mı? Eğer öyleyse, aynı şeyi yapmak isteyen başkalarına yardım etmek için bir cevap kabul etmeyi düşünür müsünüz?
Mawg, Monica'yı

rm -rf /*;) --- ciddiye yapmayın
Muhammed Umer

Yanıtlar:


28
rm -rf /config/filegroups/*

Yalnızca dizinleri (ve dizinlere olan simgeleri) silmek, dosyalara /config/filegroupsdokunulmadan bırakmak istiyorsanız, eğik çizgi kullanabilirsiniz:

rm -rf /config/filegroups/*/

.Oldukça yeni bir bash'a sahip olduğunuzu varsayarak, adları ile başlayan dizinleri silmek istiyorsanız , dotglob kabuk seçeneğini kullanmalısınız:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

ve lütfen rm -rf "/ config / filegroups / *" için çalışmayacağını unutmayın
Ilya Yevlampiev

5

Bu işlem, /config/filegroups"gizli" dosyalar ve dizinler (adları ile başlayan .) dahil olmak üzere tüm dosya ve dizinleri siler .

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Dosya veya dizin adları boşluklar içeriyorsa, bunu şu şekilde yapmanız gerekir:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: Önce neyin silineceğini şu şekilde kontrol edebilirsiniz:

find /config/filegroups -mindepth 1 -maxdepth 1

Belirli dosyaları veya dizinleri saklamak istiyorsanız, bunu şu şekilde yapabilirsiniz:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

Kullanmamak için bir sebep var mı find'ın -deleteseçeneği?
evilsoup

4
-deleteboş olmayan dizinleri silmeyi reddediyor. boş olmayan dizinleri silmek için gereken -maxdepthgeçersiz kılmalar . Olmadan , hangi dizinlerin silineceğini kolayca göremezsiniz çünkü dizinlerin içindeki dosyaları da listeler. Kullanmamak , gibi filtreleri kolayca kullanamayacağınız anlamına gelir . Ayrıca , önce içindeki tüm nesneleri silerek dizinleri siler, bu büyük ve derin bir ağaçsa uzun sürebilir. -depth-delete-maxdepth-maxdepth-name-delete
lesmana

4

Ben kullanmayı tercih findile -execbu gibi çağrı şey yapacak,:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

Zaten klasördeyseniz, rm -rf ./**

Yani:

cd /config/filesgroups
rm -rf ./**

Bu, tüm alt klasörleri yerel yoldan silmek için bir glob kalıbıdır.

./yerel klasöre atıfta bulunarak ... ve **altındaki tüm klasörler için ..


1
Hangi klasör ve neden `` ** ``
RalfFriedl

1
Komutunuzda rm -rf ./*kullanmıyorsanız "Böyle bir dosya veya dizin yok" hakkında teşhis mesajları almanızın muhtemel olması dışında, bunun aynısı olacaktır -f(çünkü en üstteki dizin içeriği işlenmeden önce tekrarlanan şekilde silinecektir tarafından rm).
Kusalananda
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.