J'ai opté pour une approche plus sûre et beaucoup plus rapide car j'avais 18 000 fichiers dans la liste! J'avais besoin de nettoyer des images dans une grande installation Drupal.
La suppression de tous les fichiers qui ne figurent pas dans la liste revient à ne conserver que ceux qui figurent dans la liste. J'ai donc décidé de copier les fichiers de la liste vers un autre emplacement, mais copier 20 Go de fichiers prendrait trop de place et serait très lent également. L'astuce consiste donc à copier les fichiers sous hardlinks
, à la place, en utilisant l' -l
option de cp
. Cela ne prend presque pas de place et est très rapide. De plus, comme j'avais besoin de conserver la structure du répertoire, j'ai utilisé l' --parents
option.
Voici un extrait de ma liste de fichiers:
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
Ainsi, un exemple de ligne serait, avec temp étant la destination:
cp -l --parents 'misc/feed.png' temp
Cela va créer cette structure:
temp
misc
feed.png
Notez que la destination doit être dans le même système de fichiers que la source pour que les liens physiques fonctionnent.
L'étape suivante consiste à construire le script:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Maintenant, en supposant que vous avez déjà créé le répertoire vide / certains / où / temp, vous pouvez copier les fichiers comme ceci:
sh newfilelist 2> missing_files
Notez comment les erreurs se terminent missing_files
. Le bonus supplémentaire de cette approche est que vous obtiendrez une liste de fichiers de la liste d'origine qui n'existent pas !
Après avoir exécuté le script, temp ne contiendra que les fichiers qui se trouvent dans la liste des fichiers, mais sans rien supprimer et sans prendre d'espace supplémentaire. Si vous êtes satisfait du résultat, vous pouvez supprimer tous les fichiers originaux, y compris les sous-dossiers.
Enfin, déplacez les fichiers et dossiers de temp vers leur emplacement d'origine.
Pour les 18 000 fichiers, cela n'a pris que quelques secondes.