Tôi đã tìm kiếm một cách tiếp cận an toàn hơn và nhanh hơn nhiều vì tôi có 18.000 tệp trong danh sách! Tôi cần phải dọn sạch hình ảnh trong một bản cài đặt Drupal lớn.
Xóa tất cả các tệp không có trong danh sách cũng giống như chỉ giữ lại những tệp có trong danh sách. Vì vậy, tôi quyết định thực sự sao chép các tệp từ danh sách sang một vị trí khác, nhưng sao chép 20 GB tệp sẽ chiếm quá nhiều dung lượng và cũng rất chậm. Vì vậy, mẹo là sao chép các tập tin hardlinks
thay vào đó, sử dụng -l
tùy chọn cp
. Điều này chiếm gần như không có không gian và rất nhanh. Ngoài ra, vì tôi cần bảo toàn cấu trúc thư mục, tôi đã sử dụng --parents
tùy chọn này.
Đây là một đoạn trích từ danh sách tập tin của tôi:
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
Vì vậy, một dòng ví dụ sẽ là, với temp là đích:
cp -l --parents 'misc/feed.png' temp
Điều này sẽ tạo ra cấu trúc này:
temp
misc
feed.png
Lưu ý rằng Destinaton phải nằm trong cùng hệ thống tệp với nguồn để các liên kết cứng hoạt động.
Bước tiếp theo là xây dựng tập lệnh:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Bây giờ, giả sử bạn đã tạo thư mục trống / some / where / temp, bạn có thể sao chép các tệp như thế này:
sh newfilelist 2> missing_files
Lưu ý làm thế nào lỗi kết thúc trong missing_files
. Phần thưởng thêm vào của phương pháp này là bạn sẽ nhận được một danh sách các tệp từ danh sách gốc thực sự không tồn tại!
Sau khi chạy tập lệnh, temp sẽ chỉ chứa các tệp trong danh sách tệp, nhưng không xóa bất cứ thứ gì và không chiếm thêm dung lượng. Nếu bạn hài lòng với kết quả, bạn có thể xóa tất cả các tệp gốc bao gồm các thư mục con.
Cuối cùng, di chuyển các tập tin và thư mục từ temp trở lại vị trí ban đầu.
Đối với các tệp 18.000, chỉ mất vài giây.