Saya menggunakan pendekatan yang lebih aman dan lebih cepat karena saya memiliki 18.000 file dalam daftar! Saya perlu membersihkan gambar di instalasi Drupal besar.
Menghapus semua file yang tidak ada dalam daftar sama dengan hanya menyimpan file-file yang ada dalam daftar. Jadi saya memutuskan untuk benar-benar menyalin file dari daftar ke lokasi lain, tetapi menyalin 20 GB file akan memakan terlalu banyak ruang dan sangat lambat juga. Jadi triknya adalah menyalin file sebagai hardlinks
gantinya, menggunakan -l
opsi cp
. Ini hampir tidak memakan ruang dan sangat cepat. Selain itu, karena saya perlu mempertahankan struktur direktori, saya menggunakan --parents
opsi.
Berikut ini kutipan dari daftar file saya:
1px.png
misc/feed.png
modules/file/icons/x-office-presentation.png
modules/file/icons/x-office-spreadsheet.png
newsletter.png
sites/all/libraries/ckeditor/plugins/smiley/images/devil_smile.png
sites/all/libraries/ckeditor/plugins/smiley/images/regular_smile.png
sites/default/files/009313_PwC_banner_CBS_Observer_180x246px.jpg
Jadi contoh barisnya adalah, dengan temp menjadi tujuan:
cp -l --parents 'misc/feed.png' temp
Ini akan membuat struktur ini:
temp
misc
feed.png
Perhatikan bahwa destinaton harus dalam sistem file yang sama dengan sumber agar hardlink berfungsi.
Langkah selanjutnya adalah membuat skrip:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Sekarang, anggap Anda sudah membuat dir kosong / some / where / temp, Anda dapat menyalin file seperti ini:
sh newfilelist 2> missing_files
Perhatikan bagaimana kesalahan berakhir missing_files
. Bonus tambahan dari pendekatan ini adalah Anda akan mendapatkan daftar file dari daftar asli yang sebenarnya tidak ada!
Setelah menjalankan skrip, temp hanya akan berisi file-file yang ada di daftar file, tetapi tanpa menghapus apa pun dan tanpa mengambil ruang tambahan. Jika Anda puas dengan hasilnya, Anda dapat menghapus semua file asli termasuk subfolder.
Akhirnya, pindahkan file dan folder dari temp kembali ke lokasi asli.
Untuk 18.000 file hanya butuh beberapa detik.