Önce derinlemesine yuvalanmış dizinleri listeleyin.
find . -depth -type d -exec rmdir {} \; 2>/dev/null
( Yönlendirmenin yalnızca find
komut için değil, bir bütün olarak geçerli olduğunu unutmayın rmdir
. Yalnızca yeniden yönlendirmek, rmdir
bir ara kabuk çağırmanız gerekeceğinden önemli bir yavaşlamaya neden olur.)
Tahmini bulmak rmdir
için -empty
yüklemeyi geçerek boş olmayan dizinlerde yayın yapmaktan kaçınabilirsiniz . GNU find, komutu çalıştırmak üzere olduğunda dizini test eder, bu nedenle yeni boşaltılmış dizinler alınacaktır.
find . -depth -type d -empty -exec rmdir {} \;
Hızlandırmanın başka bir yolu da rmdir
istilaları gruplandırmak olacaktır . Her ikisinin de, özellikle Cygwin altında, orijinalinden belirgin şekilde daha hızlı olması muhtemeldir. Bu ikisi arasında fazla fark beklemiyorum.
find . -depth -type d -print0 | xargs -0 rmdir 2>/dev/null
find . -depth -type d -exec rmdir {} + 2>/dev/null
Hangi yöntemin daha hızlı olduğu, kaç tane boş olmayan dizininiz olduğuna bağlıdır. -empty
Çağrıları gruplama yöntemleriyle birleştiremezsiniz , çünkü o zaman yalnızca boş dizinler içeren dizinler zamana göre boş değildir find
.
Başka bir yöntem, birden çok geçiş çalıştırmaktır. Bunun daha hızlı olup olmadığı, tüm dizin hiyerarşisinin, find
çalıştırmalar arasındaki disk önbelleğinde kalıp kalmayacağı da dahil olmak üzere birçok şeye bağlıdır .
while [ -n "$(find . -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
Alternatif olarak, zsh kullanın. Glob eleme F
yüzden, boş olmayan dizinleri maçları /^F
boş dizinleri eşleşir. Yalnızca boş dizinler içeren dizinler o kadar kolay eşleştirilemez.
while rmdir **/*(/N^F); do :; done
(Bu rmdir
, boş bir komut satırı aldığında sona erer .)