Bagaimana cara scp / tar file yang ada di antara hari-hari tertentu?
8
Saya perlu menyalin file log db antara dua server suse di mana saya hanya tertarik pada file antara 10.3.2013 - 13.3.2013
Diinginkan untuk mengkompres file sebelum menyalin jadi saya tar mereka dan scp. Saat ini saya menggunakan tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10yang memberi saya semua file dari 10.3.2013 sampai sekarang. Tetapi saya tidak membutuhkan semuanya. Dan saya tidak menemukan saklar tar.
Seperti yang ditunjukkan Bichoy, Anda dapat menggunakan findperintah untuk menemukan file dengan akses, waktu pembuatan, dan modifikasi tertentu. Namun - waktu mengambil offset dalam kenaikan 24 jam dan tidak selalu nyaman untuk dihitung kecuali jika Anda menginginkan sesuatu dari jumlah tertentu jumlah 'hari' yang lalu. Anda harus menggabungkannya dengan -daystartuntuk 'memutari' itu ke awal hari.
Saya pikir lebih nyaman dalam kasus Anda, adalah opsi -newermt yang mengambil datestring (dan bukan nama file referensi seperti kebanyakan versi -newerXY)
Menggabungkan dengan find's -print0pilihan untuk file handle dengan spasi dalam nama dan opsional -type funtuk tidak mendapatkan direktori pada periode Anda tertarik:
find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
-newermt 20130310 -not -newermt 20130314 -type f -print0 \
| xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz
Ada satu masalah besar dengan itu: jika jumlah file yang ditemukan menjadi panjang, xargsakan memanggil perintahnya (dalam hal ini tar) beberapa kali karena xargsharus sesuai dengan argumen pada commandline yang tidak terbatas. Untuk menghindari itu saya selalu menggunakan cpio, yang bertuliskan nama file dari stdin. Dengan --format=ustarparameter untuk mendapatkan file tar POSIX, dan dalam kasus Anda, Anda perlu menyalurkan output gzipuntuk mendapatkan hasil yang diinginkan:
Bisakah saya menentukan jam dan menit saat menggunakan kode Anda?
Radek
Saya mencoba sebelum memposting komentar saya tetapi ... "menemukan: Saya tidak tahu bagaimana menafsirkan` 201302050000 'sebagai tanggal atau waktu "
Radek
@ Radek Jawaban singkatnya adalah Ya. Saya akan menggunakan YYYYMMDDThhmm agar tidak harus berurusan dengan spasi. Jawaban panjangnya: man find akan memberi tahu Anda: Spesifikasi waktu diartikan sebagai argumen untuk opsi -d dari tanggal GNU dan dengan man date Anda akan menemukan... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
Anthon
@Radek terima kasih telah menunjukkan kesalahannya, karena saya tidak dapat mengedit komentar saya, saya memasukkan kembali yang baru dengan Tmemasukkan antara Hari dan Jam. Itu saya uji dan bekerja. Entah bagaimana findtidak tahu cara membagi string sebaliknya (mungkin karena itu bisa YYMMDDhhmmss bukan YYYYMMDDhhmm. Saya pikir tanggal akan memerlukan titik untuk detik ( .ss) tetapi itu mungkin hanya untuk mengatur tanggal.
Anthon
4
Anda dapat memeriksa findperintah untuk mendapatkan daftar file yang perlu dijinakkan. Anda dapat menentukan tanggal awal dan akhir (sampai detik presisi) menggunakan normal -atime, -btime, -mtime... argumen dalam kombinasi dengan -notargumen. Anda kemudian dapat menyalurkan output ke xargsdan kemudian ke tar. Periksa halaman manual finduntuk detail tentang argumen waktu.
Pembaruan:
Seperti yang disarankan Anthon, Anda dapat menggunakan pengubah +/- dengan -mtimeuntuk menentukan periode tanpa menggunakan -not. Berikut ini sebuah contoh:
Dimana masing-masing d, h, m, ssesuai dengan hari, jam, menit dan detik . Ini akan memberikan file yang dimodifikasi lebih baru 5d2h3m10sdan lebih lama dari4d0h15m20s
argumen -mtimeharus offset dalam hari yang tidak selalu kecuali Anda yang offset diperbaiki antara waktu berjalan. Anda juga dapat menggunakan -mtime +Xdan -mtime -Xmenentukan sebelum dan sesudah X hari yang lalu alih-alih menggunakan -not.
Anthon
Apa yang akan menjadi sintaks untuk menentukan tanggal & waktu absolut?
... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
T
memasukkan antara Hari dan Jam. Itu saya uji dan bekerja. Entah bagaimanafind
tidak tahu cara membagi string sebaliknya (mungkin karena itu bisa YYMMDDhhmmss bukan YYYYMMDDhhmm. Saya pikir tanggal akan memerlukan titik untuk detik (.ss
) tetapi itu mungkin hanya untuk mengatur tanggal.Anda dapat memeriksa
find
perintah untuk mendapatkan daftar file yang perlu dijinakkan. Anda dapat menentukan tanggal awal dan akhir (sampai detik presisi) menggunakan normal-atime
,-btime
,-mtime
... argumen dalam kombinasi dengan-not
argumen. Anda kemudian dapat menyalurkan output kexargs
dan kemudian ketar
. Periksa halaman manualfind
untuk detail tentang argumen waktu.Pembaruan: Seperti yang disarankan Anthon, Anda dapat menggunakan pengubah +/- dengan
-mtime
untuk menentukan periode tanpa menggunakan-not
. Berikut ini sebuah contoh:Dimana masing-masing
d, h, m, s
sesuai dengan hari, jam, menit dan detik . Ini akan memberikan file yang dimodifikasi lebih baru5d2h3m10s
dan lebih lama dari4d0h15m20s
sumber
-mtime
harus offset dalam hari yang tidak selalu kecuali Anda yang offset diperbaiki antara waktu berjalan. Anda juga dapat menggunakan-mtime +X
dan-mtime -X
menentukan sebelum dan sesudah X hari yang lalu alih-alih menggunakan -not.