Ho optato per un approccio più sicuro e molto, molto più veloce perché avevo 18.000 file nell'elenco! Avevo bisogno di ripulire le immagini in una grande installazione di Drupal.
L'eliminazione di tutti i file non presenti nell'elenco equivale a conservare solo quelli presenti nell'elenco. Così ho deciso di copiare effettivamente i file dall'elenco in un'altra posizione, ma la copia di 20 GB di file occuperebbe troppo spazio e sarebbe anche molto lenta. Quindi il trucco è copiare i file come hardlinks
invece, usando l' -l
opzione di cp
. Questo non occupa quasi spazio ed è molto veloce. Inoltre, poiché avevo bisogno di preservare la struttura delle directory, ho usato l' --parents
opzione.
Ecco un estratto dal mio elenco di file:
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
Quindi una riga di esempio sarebbe, con temp come destinazione:
cp -l --parents 'misc/feed.png' temp
Questo creerà questa struttura:
temp
misc
feed.png
Si noti che il destino deve trovarsi nello stesso file system dell'origine affinché i collegamenti fisici funzionino.
Il prossimo passo è costruire lo script:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Ora, supponendo che tu abbia già creato la directory vuota / some / where / temp, puoi copiare i file in questo modo:
sh newfilelist 2> missing_files
Nota come finiscono gli errori missing_files
. Il vantaggio aggiuntivo di questo approccio è che otterrai un elenco di file dall'elenco originale che in realtà non esistono!
Dopo aver eseguito lo script, temp conterrà solo i file presenti nell'elenco dei file, ma senza eliminare nulla e senza occupare spazio aggiuntivo. Se sei soddisfatto del risultato, puoi eliminare tutti i file originali comprese le sottocartelle.
Infine, sposta i file e le cartelle dalla temp alla posizione originale.
Per i 18.000 file ci sono voluti solo pochi secondi.