Bạn dường như đã trộn lẫn một số điều.
set today = 'date +%Y'
Trông giống như cú pháp tcsh, nhưng ngay cả trong tcsh, nó gán chuỗi date +%Y
cho biến today
, nó không chạy date
lệnh. Vì bạn có thể đang sử dụng bash hoặc một số vỏ POSIX khác, cú pháp của bài tập là today=some_value
(không có khoảng trắng xung quanh dấu bằng). Để chạy lệnh và gán đầu ra của nó cho biến, sử dụng lệnh thay thế :
today=$(date +%Y-%m-%d)
(Tôi cũng đã hoàn thành đặc tả ngày). Bạn có thể sử dụng backquote thay vì dấu ngoặc đơn đô la, nhưng nó dễ bị nhầm lẫn về mặt trực quan với các trích dẫn chuyển tiếp và các quy tắc khi bạn cần trích dẫn bên trong một lệnh backquote khá phức tạp và phụ thuộc vào việc triển khai, vì vậy tốt hơn là không nên tuân theo $(…)
(mà có tác dụng tương tự với cú pháp saner).
Bạn đã sử dụng &
ở cuối một số lệnh. Điều đó làm cho lệnh thực thi trong nền, điều không mong muốn ở đây. Tôi nghi ngờ bạn có nghĩa là &&
, có nghĩa là chỉ thực hiện lệnh tiếp theo nếu lệnh đầu tiên thành công.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Một cách khác để sử dụng &&
sau mỗi lệnh là bắt đầu tập lệnh của bạn với set -e
. Điều này báo cho shell dừng thực thi tập lệnh ngay khi bất kỳ lệnh nào trả về trạng thái khác không (ngoại trừ các lệnh trong if
điều kiện và một vài trường hợp khác).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
find
Lệnh của bạn vẫn ổn nhưng có lẽ không làm những gì bạn định làm (mặc dù tôi không biết chắc đó là gì).
Bạn đang tạo một thư mục với mkdir
và sau đó ngay lập tức duyệt qua nó find
. Điều đó sẽ không hữu ích trừ khi thư mục đã tồn tại. Ý của bạn là tạo một thư mục cho nhật ký ngày hôm nay và di chuyển các tệp gần đây từ The_Logs
một thư mục có tên là eg The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Hay bạn có nghĩa là đổi tên các tệp nhật ký ngày nay để thêm hậu tố $today
? Điều đó đòi hỏi phải tính toán tên tệp khác nhau cho mỗi tệp để di chuyển.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Lưu ý rằng tôi đã sử dụng -mtime
, để di chuyển các tệp dựa trên thời gian sửa đổi của chúng, và không phải -atime
là thời gian tệp được đọc lần cuối (nếu hệ thống của bạn theo dõi điều đó - nếu không, thì thời gian có thể lùi xa như thời gian).
:
vì sau đó nó sẽ được đọc dưới dạng máy chủ lưu trữ trong rsync và scp. stackoverflow.com/a/37143274/390066