Điểm:0

Tìm các tệp được sửa đổi giữa 2 ngày từ thư mục Nguồn (Đệ quy) và sao chép tệp đó vào thư mục Đích có cùng cấu trúc thư mục

lá cờ ma

Tôi đang cố sao chép các tệp từ nguồn sang thư mục Đích đã được sửa đổi giữa 2 ngày,

#!/usr/bin/ksh

nguồn=/home/Amal/DELTA/NGUỒN

target=/home/Amal/DELTA/TARGET

nguồn cd $

tìm ./ -type f -newermt "2021-07-08 00:00:00" ! -newermt "2021-09-18 23:59:55" -printf "%h:%p:\0" |

trong khi IFS=":" đọc tệp đường dẫn; làm

cp "$file" "$target"/"$path"

xong

LƯU Ý: Nguồn và thư mục đã có cùng cấu trúc thư mục. Tôi chỉ cần sao chép các tệp giống như thư mục NGUỒN.

Khi tôi thực thi tập lệnh này, không có thay đổi nào trong thư mục TARGET.

lá cờ hr
Bạn đang đưa dữ liệu được phân tách bằng null vào vòng lặp, nhưng `read` của afaik ksh mong đợi dữ liệu được phân tách bằng dòng mới theo mặc định
Amala avatar
lá cờ ma
@Steeldriver - Ngay cả sau khi xóa \0 khỏi lệnh find, không có thay đổi nào. Các tệp không được sao chép vào TARGET.
lá cờ hr
@Amala bạn sẽ cần phải **thay thế** `\0` bằng `\n` trong `printf` - hoặc chuyển sang bash nơi `read -d ''` có thể được sử dụng để đọc các "dòng" được phân cách bằng null
Amala avatar
lá cờ ma
@steeldriver - Cảm ơn bạn rất nhiều. Thay thế \0 bằng \n đã hoạt động.
Điểm:0
lá cờ cn

Một cách có thể là sử dụng rsync với --include-từ-tệp Tùy chọn. rsync là một tiện ích sao chép tệp linh hoạt, theo mặc định sẽ sao chép cấu trúc thư mục. với --include-từ-tệp tùy chọn, bạn có thể chỉ rsync vào một danh sách, một tệp văn bản, xác định các tệp sẽ được đưa vào bản sao. Danh sách như vậy có thể được tạo ra với tìm thấy chỉ huy.

Vì vậy, trước tiên hãy chạy tìm thấy để xác định vị trí các tệp mong muốn và liệt kê chúng trong một tệp văn bản. Sau đó sử dụng rsync để chỉ sao chép các tệp này qua. Rõ ràng là dễ viết kịch bản khi bạn đã làm cho nó hoạt động.

Amala avatar
lá cờ ma
rsync không khả dụng trong máy chủ ứng dụng của chúng tôi (Máy chủ Linux).
vanadium avatar
lá cờ cn
Đó là thông tin khá quan trọng mà bạn có thể muốn thêm vào câu hỏi của mình. Sử dụng "chỉnh sửa". Tôi sẽ để lại câu trả lời vì đại đa số người dùng sẽ có thể cài đặt và sử dụng rsync.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.