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 od
kaldı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 mv
ve rmdir
etkilenmeyen yapılara sahiptir: zmodload zsh/files
bunları 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 {} +