Pindahkan file ke direktori lain yang lebih tua dari tanggal

28

Saya mencari solusi untuk memindahkan file yang lebih tua setahun dari hari ini. Partisi log saya sudah penuh, tetapi saya tidak bisa menghapusnya. Mereka dibutuhkan untuk waktu yang lama. Pokoknya salah satu solusi yang saya buat adalah:

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

Apakah ini akan berhasil? Bertanya karena " -mtime 365 " akankah ini memindahkan file yang lebih tua dari hari ini ke lokasi baru?

Terima kasih!

mYzk
sumber

Jawaban:

40

Anda hampir benar. -mtime 365akan menjadi semua file yang berumur tepat 365 hari. Anda ingin yang berusia 365 hari atau lebih, yang berarti menambahkan +sebelum angka seperti ini -mtime +365.

Anda juga mungkin tertarik pada -maxdepth 1flag, yang mencegah Anda memindahkan item di sub direktori.

Jika Anda ingin memastikan bahwa Anda hanya memindahkan file, bukan direktori, tambahkan -type fke baris.

Pada akhir baris kita tambahkan \;sehingga findtahu itu adalah akhir dari perintah yang kita jalankan.

Jadi garisnya harus:

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

Agar aman, mulailah dengan hanya melakukan ls -l bukannya mv - dengan begitu Anda dapat memeriksa terlebih dahulu apakah Anda mendapatkan file yang Anda inginkan, sebelum menjalankannya kembali dengan mv, seperti ini:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;
Jenny D kata Reinstate Monica
sumber
3
Ingatlah bahwa mtimeini adalah waktu Modifikasi (yang terdengar seperti apa yang Anda inginkan - sebagian besar waktu itu). Jika log ini sering dibaca / dirujuk, Anda mungkin ingin menggunakan -atime(waktu akses terakhir).
voretaq7
2
Apa yang dilakukan garis miring terbalik pada akhir baris ini?
Ben Liyanage
1
@BenLiyanage Backslash adalah karakter pelarian untuk titik koma yang mengikutinya. Titik koma berarti akhir dari execpernyataan. Lihat halaman manual untuk find.
Jenny D mengatakan Reinstate Monica
4

Hati-hati saat menggunakan solusi di atas, saya menggunakannya dan akhirnya memindahkan semua file di semua subfolder !!!!

Perintah ini memindahkan semua file di direktori / sumber dan semua subfolder di bawah direktori sumber:

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

Sebagai gantinya, gunakan opsi -maxdepth 1 untuk hanya file di / sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
harleygolfguy
sumber
Jawaban berperingkat tertinggi berisi catatan ini, dan menyarankan untuk menggunakan -type f. Apakah yang Anda maksudkan ini bukan berarti bahwa subfolder dipindahkan tetapi kontennya tetap berada di dalam subfolder alih-alih dipindahkan dari mereka atau ...?
austinian
1
tidak, maksud saya 'temukan' akan menemukan semua file di / sourcedirectory dan semua subfolder di dalam / sourcedirectory, yang tidak saya pikirkan saat itu. '-Maxdepth 1' membatasi 'find' menjadi only / sourcedirectory
harleygolfguy
BTW, saya akan memiliki ini hanya sebagai komentar untuk jawaban berperingkat tertinggi, yang merupakan jawaban yang baik, tetapi saya tidak memiliki reputasi. :)
harleygolfguy
0

Anda dapat menggunakan perintah ini, dan menentukan bahwa Anda hanya menemukan file, bukan direktori, dan file lebih lama dari satu tahun

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
cuonglm
sumber
Kenapa dia harus menggunakan rm? Perintah Anda menghapus kedua file log dan mungkin direktori tujuan.
Sven
Ops, kesalahan saya, saya pikir @mYzk ingin menghapus file ini. Diedit
cuonglm
0

Anda dapat menggunakan perintah di bawah ini dengan atime jika file sering diakses

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;
Pradeep Kanoor
sumber
0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

Benar akan menghapus akhir garis miring dari /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
internetuser2008
sumber
Dalam pengujian saya, saya tidak dapat mereplikasi find: missing argumentkesalahan, namun saya setuju bahwa menghapus garis miring dari /sourcedirectorysudah benar.
guzzijason