Trong zsh:
mv dir1/*/**/*(.D) dir1
**/
đi qua các thư mục con đệ quy. Vòng loại toàn cầu chỉ .
khớp với các tệp thông thường và D
đảm bảo rằng các tệp chấm được bao gồm (theo mặc định, các tệp có tên bắt đầu bằng một .
loại trừ các ký tự đại diện). Để dọn sạch các thư mục trống bây giờ sau đó, hãy chạy rmdir dir1/**/*(/Dod)
- /
giới hạn các thư mục và od
đặt hàng độ sâu khớp trước để xóa dir1/dir2/dir3
trước dir1/dir2
.
Nếu tổng chiều dài của tên tệp rất lớn, bạn có thể gặp phải giới hạn về độ dài dòng lệnh. Zsh đã tích hợp sẵn mv
và rmdir
không bị ảnh hưởng bởi giới hạn này: chạy zmodload zsh/files
để kích hoạt chúng.
Chỉ với các công cụ POSIX:
find dir1 -type f -exec mv {} dir1 \;
find dir1 -depth -exec rmdir {} \;
hoặc (nhanh hơn vì không phải chạy một quy trình riêng cho mỗi tệp)
find dir1 -type f -exec sh -c 'mv "$@" dir1' _ {} +
find dir1 -depth -exec rmdir {} +