Bagaimana cara menyalin file di unix tanpa mengubah waktu modifikasi terakhirnya?

89

Jika saya menyalin beberapa file dari satu tempat ke tempat lain menggunakan cp, cap waktu pada file yang disalin diatur ke waktu salinan.

Apakah ada cara untuk menghindari ini?

Saya perlu menyalin file tanpa mengubah stempel waktu mereka.

Lazer
sumber

Jawaban:

103

cp -plakukan triknya. Untuk Linux :

-p sama dengan --preserve=mode,ownership,timestamps

Untuk FreeBSD :

-p Penyebab cp untuk mempertahankan atribut berikut dari setiap file sumber dalam salinan: waktu modifikasi, waktu akses, flag file, mode file, ACL, ID pengguna, dan ID grup, sebagaimana diizinkan oleh izin.

Dan untuk OS X :

-pPenyebab cp untuk mempertahankan atribut berikut dari setiap file sumber dalam salinan: waktu modifikasi, waktu akses, flag file, mode file, ID pengguna, dan ID grup, sebagaimana diizinkan oleh izin. Daftar Kontrol Akses (ACL) dan Atribut yang Diperpanjang (EA), termasuk garpu sumber daya, juga akan dipertahankan.

Arjan
sumber
25
cp -a juga bagus untuk diketahui, itu tidak hanya berarti -p, tetapi juga -R untuk menyalin seluruh direktori dan -d untuk menjaga tautan.
kasual
2
Perhatikan bahwa ketika menggunakan GNU Coreutils cp -ptidak hanya mempertahankan cap waktu tetapi juga mode dan kepemilikan dan pada FreeBSD selain waktu modifikasi itu juga mempertahankan »waktu akses, flag file, mode file, ACL, ID pengguna, dan ID grup, sebagaimana diizinkan berdasarkan izin. «dan pada OS X tambahan» Atribut Diperpanjang, termasuk garpu sumber daya «.
Stefan Schmidt
pada OSX terbaru, cp -p masih menyentuh stempel waktu file sumber
afathman
15

Saat menggunakan cpdari GNU Coreutils , untuk mempertahankan hanya stempel waktu dan bukan atribut seperti id pengguna, id grup atau mode file ada tugas lama --preserveyang memungkinkan untuk secara eksplisit menentukan daftar atribut yang harus dipertahankan.

cp --preserve=timestamps source destination

Ketahuilah bahwa sintaks ini mungkin tidak didukung pada Unix lain. Alternatifnya adalah menggunakan --timesparameter rsyncyang harus tersedia pada sebagian besar instalasi.

Stefan Schmidt
sumber
4
Ini jawaban yang benar. Menggunakan -pbukanlah jawaban yang benar. -pmempertahankan kepemilikan & mode juga. Yang mungkin tidak diinginkan .. dan tidak ditanyakan.
bshea
10

Ada tiga kali pada sistem file Unix, waktu akses (atime), waktu modifikasi (mtime), dan waktu perubahan inode (ctime). Anda dapat mengubah waktu akses dan waktu modifikasi dengan program sentuh, misalnya

salinan asli cp
sentuh -r copy asal

Namun, Anda tidak dapat mengubah waktu perubahan inode.

gorila
sumber
1
untuk waktu perubahan inode, lihat juga linux - Mengatur pembuatan atau mengubah stempel waktu - Stack Overflow
sdaau
0

Saya baru-baru ini perlu melakukan sesuatu yang serupa tetapi menggunakan symlink sebagai gantinya. Untuk membuat symlink dan menyimpan stempel waktu orignal:cp -ps src_file dst_symlink

fduff
sumber
Sebagai komentar, ini dapat bermanfaat bagi beberapa pembaca, sebagai jawaban yang menambah kebisingan bagi sebagian besar pembaca.
ndemou