Tengo un archivo de manifiesto que es solo una lista de nombres de archivo separados por nueva línea. ¿Cómo puedo eliminar todos los archivos que son no nombrados en el manifiesto desde una carpeta?BASH: ¿Cómo eliminar todos los archivos excepto aquellos nombrados en un manifiesto?
He intentado construir un comando find ./ ! -name "filename"
dinámicamente:
command="find ./ ! -name \"MANIFEST\" "
for line in `cat MANIFEST`; do
command=${command}"! -name \"${line}\" "
done
command=${command} -exec echo {} \;
$command
pero se mantienen los archivos.
[Nota:] Sé que esto usa eco. Quiero comprobar lo que hace mi comando antes de usarlo.
Solución: (gracias PixelBeat)
ls -1 > ALLFILES
sort MANIFEST MANIFEST ALLFILES | uniq -u | xargs rm
Sin archivo temporal:
ls -1 | sort MANIFEST MANIFEST - | uniq -u | xargs rm
Tanto Ignora si los archivos están ordenados/No.
Thanks All! Lo estoy dando a pixelbeat para su guía de shell que contenía la solución – brice