Eu percebo que qualquer pergunta sobre como excluir arquivos deve ser feita com muito cuidado. Minha primeira resposta foi muito apressada. Eu não aceitei o fato de que a lista de arquivos poderia ser malformada para ser usada com o egrep. Eu editei a resposta para reduzir esse risco.
Isso deve funcionar para os arquivos que não têm espaço no nome:
Primeiro, reconstrua sua lista de arquivos para ter certeza de corresponder ao nome exato do arquivo:
sed -e 's,^,^,' -e 's,$,$,' filelist > newfilelist
construa os comandos rm
cd your_directory
ls | egrep -vf newfilelist | xargs -n 1 echo rm > rmscript
Verifique se a script rm combina com você (você pode fazer isso com "vim" ou "less").
Em seguida, execute a ação:
sh -x rmscript
Se os arquivos tiverem espaços em seus nomes (se os arquivos tiverem o "
no nome, isso não funcionará):
ls | egrep -vf newfilelist | sed 's,^\(.*\)$,rm "",' > rmscript
é claro que a lista de arquivos não deve estar no mesmo diretório!
EDITADO:
A lista de arquivos do Nathan continha nomes que correspondiam a todos os arquivos no diretório (como "html" corresponde a "bob.html"). Portanto, nada foi excluído porque egrep -vf
absorveu todo o fluxo. Eu adicionei um comando para colocar um "^" e um "$" em torno de cada nome de arquivo. Eu tive sorte aqui que a lista de arquivos de Nathan estava correta. Teria sido formatado no DOS com linhas CR-LF terminadas ou com espaços adicionais, nenhum arquivo teria sido preservado pelo egrep e todos foram excluídos.