Di chuyển tệp đến thư mục khác cũ hơn một ngày


28

Tôi đang tìm kiếm một giải pháp để di chuyển các tập tin cũ hơn từ hôm nay. Phân vùng nhật ký của tôi đã đầy, nhưng tôi không thể xóa chúng. Chúng cần thiết trong một thời gian dài. Dù sao, một giải pháp tôi đã đưa ra là:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Điều này sẽ làm việc? Hỏi vì " 365 giờ ", điều này có thể di chuyển các tệp cũ hơn từ hôm nay sang một vị trí mới không?

Cảm ơn bạn!

Câu trả lời:


40

Bạn gần như đúng. -mtime 365sẽ là tất cả các tệp chính xác là 365 ngày. Bạn muốn những cái đã 365 ngày trở lên, có nghĩa là thêm một số +trước số này -mtime +365.

Bạn cũng có thể quan tâm đến -maxdepth 1cờ, điều này ngăn bạn di chuyển các mục trong thư mục phụ.

Nếu bạn muốn chắc chắn rằng bạn chỉ di chuyển tệp, không phải thư mục, hãy thêm -type fvào dòng.

Ở cuối dòng chúng ta thêm vào \;để findbiết rằng đó là kết thúc của lệnh chúng ta đang thực thi.

Vì vậy, dòng nên là:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

Để đảm bảo an toàn, hãy bắt đầu bằng cách thực hiện ls -l thay vì mv - theo cách đó bạn có thể kiểm tra trước xem bạn có nhận được chính xác các tệp bạn muốn không, trước khi chạy lại với mv, như thế này:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

3
Hãy nhớ rằng đó mtimelà thời gian Sửa đổi (nghe có vẻ như những gì bạn có thể muốn - hầu hết thời gian là vậy). Nếu các nhật ký này được đọc / tham chiếu thường xuyên, bạn có thể muốn sử dụng -atime(lần truy cập cuối cùng).
voretaq7

2
Dấu gạch chéo ở cuối dòng này làm gì?
Ben Liyanage

1
@BenLiyanage Dấu gạch chéo ngược là ký tự thoát cho dấu chấm phẩy theo sau. Dấu chấm phẩy có nghĩa là kết thúc của exectuyên bố. Xem trang người đàn ông cho find.
Jenny D nói Phục hồi Monica

4

Hãy cẩn thận khi sử dụng các giải pháp trên, tôi đã sử dụng chúng và cuối cùng đã di chuyển tất cả các tệp trong tất cả các thư mục con !!!!

Lệnh này di chuyển tất cả các tệp trong thư mục / source và tất cả các thư mục con trong thư mục nguồn:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

Thay vào đó, hãy sử dụng tùy chọn -maxdepth 1 chỉ cho các tệp trong / sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

Câu trả lời được đánh giá cao nhất có chứa ghi chú này và gợi ý sử dụng -type f. Ý của bạn là điều này thay vào đó có nghĩa là các thư mục con được di chuyển nhưng nội dung của chúng vẫn nằm trong các thư mục con thay vì bị di chuyển ra khỏi chúng hoặc ...?
austinian

1
không, ý tôi là 'find' sẽ tìm thấy tất cả các tệp trong / sourcedirectory và tất cả các thư mục con trong đó / sourcedirectory, lúc đó tôi không nghĩ đến. '-Maxdepth 1' giới hạn 'tìm' chỉ / nguồn gốc
harleygolfguy

BTW, tôi sẽ có điều này chỉ là một nhận xét cho câu trả lời được đánh giá cao nhất, đó là một câu trả lời tốt, nhưng tôi không có tiếng tăm. :)
harleygolfguy 16/07/2015

0

Bạn có thể sử dụng lệnh này và chỉ định rằng bạn chỉ tìm thấy các tệp, không phải thư mục và tệp cũ hơn một năm

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;

Tại sao anh ta nên sử dụng rm? Lệnh của bạn xóa cả các tệp nhật ký và có thể thư mục đích.
Sven

Ops, lỗi của tôi, tôi nghĩ @mYzk muốn xóa tệp này. Đã chỉnh sửa
cuonglm

0

Bạn có thể sử dụng lệnh dưới đây với atime nếu các tệp được truy cập thường xuyên

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

Chính xác sẽ được loại bỏ kết thúc dấu gạch chéo từ /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

Trong các thử nghiệm của mình, tôi không thể sao chép find: missing argumentlỗi, tuy nhiên tôi đồng ý rằng việc bỏ dấu gạch chéo từ đó /sourcedirectorylà chính xác.
guzzijason
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.