¡Fui por un enfoque más seguro y mucho más rápido porque tenía 18,000 archivos en la lista! Necesitaba limpiar imágenes en una gran instalación de Drupal.
Eliminar todos los archivos que no están en la lista es lo mismo que conservar solo los que están en la lista. Así que decidí copiar los archivos de la lista a otra ubicación, pero copiar 20 GB de archivos ocuparía demasiado espacio y también sería muy lento. Entonces, el truco es copiar los archivos como hardlinks
, en su lugar, usando la -l
opción de cp
. Esto casi no ocupa espacio y es muy rápido. Además, como necesitaba preservar la estructura del directorio, utilicé la --parents
opción.
Aquí hay un extracto de mi lista de archivos:
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
Entonces, una línea de ejemplo sería, con temp como destino:
cp -l --parents 'misc/feed.png' temp
Esto creará esta estructura:
temp
misc
feed.png
Tenga en cuenta que el destino debe estar en el mismo sistema de archivos que la fuente para que funcionen los enlaces duros.
El siguiente paso es construir el script:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Ahora, suponiendo que ya haya creado el directorio vacío / some / where / temp, puede copiar los archivos de esta manera:
sh newfilelist 2> missing_files
Tenga en cuenta cómo terminan los errores missing_files
. ¡La ventaja adicional de este enfoque es que obtendrá una lista de archivos de la lista original que en realidad no existen!
Después de ejecutar el script, temp contendrá solo aquellos archivos que están en la lista de archivos, pero sin eliminar nada y sin ocupar espacio adicional. Si está satisfecho con el resultado, puede eliminar todos los archivos originales, incluidas las subcarpetas.
Finalmente, mueva los archivos y carpetas de temp nuevamente a la ubicación original.
Para los 18,000 archivos, solo tomó unos segundos.