Có nhiều cách. Dưới đây là cái gì đó rất nhanh:
find /your/dir -type d -print0 | xargs -0 echo
này sẽ quét/your/dir đệ quy cho các thư mục và sẽ vượt qua tất cả đường dẫn đến lệnh "echo" (trao đổi nhu cầu của bạn). Nó có thể gọi echo nhiều lần, nhưng nó sẽ cố gắng truyền nhiều tên thư mục như giao diện điều khiển cho phép cùng một lúc. Điều này cực kỳ nhanh vì vài quá trình cần phải được bắt đầu. Nhưng nó chỉ hoạt động trên các chương trình có thể lấy một số lượng tùy ý các giá trị như các tùy chọn. print0 nói tìm đến đường dẫn tập tin riêng biệt sử dụng một byte zero (và -0 kể xargs để đọc đối số phân cách bằng zero byte) Nếu bạn không có một sau, bạn có thể làm điều này:
find /your/dir -type d -print0 | xargs -0 -n 1 echo
hoặc
find /your/dir -type d -print0 --exec echo '{}' ';'
Tùy chọn -n 1 sẽ yêu cầu xargs không chuyển nhiều đối số hơn cùng một lúc vào chương trình của bạn. Nếu bạn không muốn tìm quét quét đệ quy, bạn có thể chỉ định tùy chọn chiều sâu để vô hiệu hóa đệ quy (không biết cú pháp bằng trái tim).
Mặc dù điều đó có thể sử dụng được trong tập lệnh cụ thể của bạn là một câu hỏi khác ;-).
làm như vậy, nhưng tại sao? */là một ký tự đại diện cho tất cả các thư mục? – jakev
Chà, điều đó thực sự hiệu quả, ngay cả trên các thư mục có dấu cách. Vì vậy, bash phải ngầm báo giá trị khi nó mở rộng ký tự đại diện? Tôi thích nó. – harpo
@JakeVA: Vâng, chính xác. Lưu ý rằng nó sẽ không bao gồm các thư mục ẩn trừ khi bạn đặt 'shopt -s dotglob'. Nếu thư mục hiện tại có thể không có thư mục con, bạn cũng nên đặt 'shopt -s nullglob' (đặt nó trong trường hợp). –