Önce derinlemesine yuvalanmış dizinleri listeleyin.
find . -depth -type d -exec rmdir {} \; 2>/dev/null
( Yönlendirmenin yalnızca findkomut için değil, bir bütün olarak geçerli olduğunu unutmayın rmdir. Yalnızca yeniden yönlendirmek, rmdirbir ara kabuk çağırmanız gerekeceğinden önemli bir yavaşlamaya neden olur.)
Tahmini bulmak rmdiriçin -emptyyü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 rmdiristilaları 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ı /^Fboş 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 .)