Diyelim ki bir rehberim var foo/. Bu klasör alt dizinleri içerir. Tüm boş dizinleri tek bir komutta nasıl silebilirim?
Diyelim ki bir rehberim var foo/. Bu klasör alt dizinleri içerir. Tüm boş dizinleri tek bir komutta nasıl silebilirim?
Yanıtlar:
Bu komutu dene:
find . -empty -type d -delete
findKomut bu durumda, belirtilen yoldan belirli bir arama kriterleri dosyaları / dizinleri için geçerli dizin (dolayısıyla aramak için kullanılır .).
-emptySeçenek boş herhangi bir dosya ve dizin için de geçerlidir.
-type dSeçenek için de geçerlidir dosya belirtilen türün; bu durumda ddosya tipi dizinini ifade eder .
-deleteSeçenek gerçekleştirmek için eylemdir ve aramada bulunan tüm dosyalar için de geçerlidir.
rm -rf <directory-name>. Bu, dosyaları ve alt dizinleri içeren tüm içeriği ile birlikte dizini de kaldırır. -rSeçenek ise, yinelemeli silmek demektir -fkomut aracı silmeden önce istenmez. Bununla birlikte, bir dizini / dosyayı silmeden önce sorulmasını istiyorsanız, -fseçeneği seçenekle değiştirin -i.
stdouttek bir komut (örneğin bir findiçine) stdin(örn diğerinin rmo / sen istemediğiniz dizinleri silip veya dosyaları silebilir beri), ancak, çok dikkatli olmak silme! Bunun nasıl yapılacağı hakkında daha fazla bilgi maniçin, bu komutların her birinin sayfalarına bakın . Güvenli olmak için, gerçek bir şey denemeden önce bu tür şeyleri her zaman geçici bir dizinde test edin.
Sen yararlanabilirsiniz rmdirboş olmayan dizinleri silmek için komutun reddetmesi ve find -depthopsiyon dizin ağacı aşağıdan yukarıya hareket etmesi:
find . -depth -exec rmdir {} \;
(ve hataları yoksay), ya da 2>/dev/nullgerçekten görmezden gelmek için ekleme yap .
-depthSeçeneği finddizin ağacının dibinde bularak başlar.
rm -rfDizindeki tüm dosyaları (ve alt dizinlerini ve ...) VE tüm dizinleri ve her şeyi silecektir .
rmdir *
Tüm boş dizinleri siler. Boş olmayan her dizin ve dosya için bir hata atar, bu hataların uçbiriminizi karıştırmasını önlemek için
rmdir * 2> /dev/null
rmdir * 2>/dev/null || true. (
$HOME. Kötü bir sırıtışla.
find . -type d -empty -delete -maxdepth 1
Çünkü sadece direk alt dizinlerini silmek istiyorsanız foo/.
$ tree
.
├── empty_dir1
├── empty_dir2
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
Bu böyle çalışır:
os.walk()dizin ağacını özyinelemeli olarak yürümek için kullanırız . Her yineleme üzerinde rbiz erişiyorsunuz geçerli klasöre ayarlanır, siçindeki dizinleri listesini içerir rve fbu klasördeki dosyaların listesini içerecektir. Tabii ki fve sboşsa, bunun boş olduğunu biliyoruz r.emptyyukarıda belirtilen değerlendirmeye dayanarak, boş olan tüm dizinlerin bir listesini oluşturmamızı sağlar .map()gerçekleştirmek os.rmdir()için kullanılır empty. Liste anlama alternatif olarak da kullanılabilir.Bir komut dosyası olarak bu böyle olurdu:
#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
if not f and not s and r != ".":
empty.append(r)
for i in empty:
os.rmdir(i)
/bin/shsadece bash ile sınırlı değildir ve Python aslında bu ikisinden daha zarif bir dildir