Ketika saya menjalankan perintah find . -mtime -60
Saya mendapatkan daftar file yang dimodifikasi dalam 60 hari terakhir.
Jadi ketika saya menjalankan find . -mtime -60 -exec cp {} /tmp/1 \;
Saya dapat menyalin file-file ini ke direktori baru untuk diproses
Namun jika saya ingin mempertahankan stempel waktu, saya tidak dapat menyalin hanya file yang diperlukan ketika saya menjalankan find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;
Yang akhirnya terjadi adalah SEMUA file di direktori sumber disalin, bukan hanya file yang saya butuhkan.
Adakah solusi di sini?
Jawaban yang Diterima:
Apa yang terjadi di sini adalah ketika Anda menggunakan -R
pilihan untuk cp
dan menyediakan direktori sebagai argumen, ia menyalin semuanya dalam direktori itu. Selain itu, ini tidak akan mempertahankan struktur direktori karena file apa pun di direktori yang lebih rendah akan disalin langsung ke /tmp/2
. Ini mungkin yang Anda inginkan (lihat jawaban X Tian untuk cara melakukannya dengan cara ini), tetapi berhati-hatilah jika ada file yang memiliki nama yang sama, yang satu akan menimpa yang lain di tujuannya.
Untuk mempertahankan struktur direktori, Anda dapat menggunakan cpio
:
find . -mtime -60 -print0 | cpio -0mdp /tmp/2
Jika -0
(atau setara) opsi tidak tersedia, Anda dapat melakukan ini, tetapi hati-hati, tidak ada nama file Anda yang berisi baris baru:
find . -mtime -2 | cpio -mdp /tmp/2
cpio
juga harus mendukung -L
pilihan, meskipun hati-hati dengan ini karena dalam beberapa kasus dapat menyebabkan infinite loop.