Saya perlu menemukan semua file yang lebih lama dari X hari dan menghapusnya secara lokal dan dari ember s3 saya. Masalahnya adalah perintah find mengembalikan saya path lengkap dan nama file juga. Saya mencoba mengacaukan nama samaran dan beberapa hal lainnya, tetapi tidak berhasil. Bantuan apa pun akan sangat dihargai.
Untuk saat ini bagian 'hapus secara lokal' adalah ls bukannya rm ketika saya bermain-main dengannya. Untuk rm aku butuh path lengkap.
Saya perlu menelanjangi / home / ec2-user / backup / keluar dari panggilan s3cmd.
$ find /home/ec2-user/backups -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;
/home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz
File s3://kisnardonline//home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz deleted
rm full-path-and-filename
?Jawaban:
Ada beberapa cara yang bisa dilakukan. Kombinasi dari
find -print0
danxargs -0
kuat dan aman untuk bekerja dalam kombinasi dengansed -z
(menggunakan NULL sebagai pembatas garis):Sejak
s3cmd
tidak (belum) mendukung penghapusan banyak file,xargs
membutuhkan-n 1
untuk membatasi eksekusi ke satu baris sekaligus.Cara lain, mungkin lebih sederhana, adalah menyambungkan pipa
find
melaluiread
dan gunakan subtitusi variabel bash:sumber
Coba modifikasi sederhana ini:cd /home/ec2-user/backups/; find -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;
Dengan cara ini setiap jalur dikembalikan
find
relatif terhadap/home/ec2-user/backups/
dan dimulai dengan./
. Ini akan berhasil jikas3cmd
dan / atau server s3 cukup pintar untuk menerjemahkan./
sebagaimana mestinya (mis.s3://foo/./bar
sama dengans3://foo/bar
dll.)Dalam hal itu:
sumber