Zsh içinde:
mv dir1/*/**/*(.D) dir1
**/alt dizinleri yinelemeli olarak geçirir. Glob eleme . sadece normal dosyaları eşleşir ve D(varsayılan, adını başlayan bir dosyalar tarafından dot dosyaları dahil edilmesini sağlar .joker dışında tutulmuştur maçları). Artık boş olan dizinleri daha sonra temizlemek için, run rmdir dir1/**/*(/Dod)- /dizinleri kısıtlar ve daha önce odkaldırmak üzere dir1/dir2/dir3önce eşleşme derinliğini emreder dir1/dir2.
Dosya adlarının toplam uzunluğu çok büyükse, komut satırı uzunluğunda bir sınırlama olabilir. Zsh, bu sınırlamadan etkilenmeyen mvve rmdiretkilenmeyen yapılara sahiptir: zmodload zsh/filesbunları etkinleştirmek için çalıştırın .
Sadece POSIX araçlarıyla:
find dir1 -type f -exec mv {} dir1 \;
find dir1 -depth -exec rmdir {} \;
veya (daha hızlı çünkü her dosya için ayrı bir işlem yürütmek zorunda değildir)
find dir1 -type f -exec sh -c 'mv "$@" dir1' _ {} +
find dir1 -depth -exec rmdir {} +