Saya mencari perintah / skrip untuk memungkinkan file yang paling baru dimodifikasi (hingga) 10GB disalin ke komputer lain.
Jadi jika ada 4 file masing-masing 4 GB, hanya 2 dari mereka harus ditransfer oleh skrip, Jika ada 12 file 1GB besar, hanya 10 yang terbaru yang harus ditransfer.
scripting
rsync
cp
synchronization
exussum
sumber
sumber
Jawaban:
Berikut adalah skrip yang melakukan apa yang Anda minta.
Persyaratan
Rinciannya
Ini digunakan
rsync --dry-run
untuk membangun daftar file yang akan ditransfer (ini adalah file yang dimodifikasi). Kemudian menggunakan kombinasidu
danls
untuk mendapatkan ukuran dan waktu file. Ini kemudian mengurutkan file berdasarkan mtime dan kemudian loop di atasnya sampai ukuran total melebihi ambang batas. Akhirnya, ia memanggil rsync lagi hanya dengan file-file yang paling baru-baru ini dimodifikasi dan ukuran total di bawah ambang batas.Skripnya agak jelek, tapi berhasil. Satu batasan besar adalah harus dijalankan pada mesin yang berisi direktori-rsync. Itu dapat dimodifikasi untuk menggunakan ssh untuk menggunakan remote dari-direktori, tetapi excersize diserahkan kepada pembaca.
Akhirnya,
rsync
opsi tersebut dikodekan ke dalam skrip, tetapi ini adalah perubahan yang mudah jika Anda ingin menentukannya di baris perintah. Juga, matematika untuk menghitung ukuran dilakukan dalam byte. Ini dapat diubah menjadi kilo / mega / gigabytes dengan memodifikasi panggilan ke du dan mengurangi ambang dengan faktor yang sama.Pemakaian
di mana
rsync-from-directory
direktori lokal dan direktorirsync-to-directory
lokal atau jauh. Opsi default adalah hardcoded-avz
dan ambang default adalah hardcoded sebagai10GiB
.Naskah
sumber
if (( "$size" > "$THRESHOLD" ))
kondisional tambahkan tanda centang (sebelumbreak
) untuki==0
dan jika demikianecho $f >> /tmp/rsyncfilelist
,.Saya akan menggunakan rsync "--dry-run" (atau "-n") untuk mendapatkan daftar file yang lebih baru. Kemudian saya akan menggunakan rsync lain dengan opsi "--files-from = -" untuk mengirim file. Di antara ada perl "jelek" .
Sesuatu seperti ini :
Catatan saya tidak menguji dengan lebih dari 10GB, mungkin perl akan meluap pada batas tertentu; untuk mengatasinya, alih-alih menghitung byte gunakan Kbytes:
EDIT: Saya mencatat bahwa solusi pertama ini tidak akan mengurutkan file berdasarkan mtime , berikut adalah solusi yang lebih lengkap (mirip dengan skrip bash yang telah diposting oleh orang lain).
sumber
Anda dapat menguraikan output yang diurutkan dari
du
. Dengan asumsi utilitas GNU:POSIXly, dengan asumsi bahwa tidak ada nama file yang mengandung karakter baris baru:
Perhatikan bahwa
du
melintasi subdirektori. Untuk menghindarinya, beri tahudu
file mana yang ingin Anda operasikan. Secara umum, Anda dapat menggunakanfind
untuk memfilter file.sumber
rsync
alih-alihcp
.