Bắt đầu từ câu trả lời của @Joseph R., đây là giải pháp của tôi để làm cho nó hoạt động với tìm kiếm, vì tôi không thể làm cho lệnh của anh ấy hoạt động. (Tôi không nghĩ vậy, vì các quy tắc áp dụng cho \+
: không thể có gì sau {}
phần tử.) (Tôi không thể nhận xét. Toàn bộ đoạn này thực sự có thể bị xóa.)
Để sao chép tất cả các tệp vào cùng một thư mục (tại đây target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
không bắt buộc ở đây, nó sẽ chỉ tạo các thư mục không tồn tại cho mục tiêu.
Để sao chép toàn bộ hệ thống phân cấp thư mục và các tệp của nó (điều này sẽ bỏ qua các thư mục trống) bắt đầu từ nơi bạn hiện đang ở:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Như đã nói, điều này sẽ tạo lại cây bắt đầu từ $PWD
. Ngoài ra, nếu bạn cần phải sao chép vào thư mục rỗng, trên có thể tìm ra cách sử dụng -type d
của find
và install -d
.
Vì vậy, để sao chép cây, bắt đầu từ một thư mục không phải là $PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Lưu ý cách parent/directory
không được sao chép qua.
Thêm
Đối với những người sử dụng shell/fish
, đây là dòng làm tương tự:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'