Como executar o comando na lista de nomes de arquivos em um arquivo?

11

Eu listei os nomes dos arquivos que devem ser excluídos em um arquivo. Como posso passar o arquivo para rmcomando para que ele seja excluído um por um.

monu
fonte
1
Veja FAQ 001 no Wiki de Greg ...
jasonwryan

Respostas:

11

Se você tiver um arquivo por linha, uma maneira de fazer isso é:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

A lista de arquivos é fornecida como entrada para o trcomando que altera o separador de arquivo de avanço de linha para o byte nulo e o xargscomando lê arquivos separados por bytes nulos na entrada e inicia o comando rm com os arquivos anexados como argumentos.

Jonas Berlin
fonte
1
Eu também sugeriria usar em rm --vez de apenas rm, para que os nomes de arquivos que podem começar com traço não sejam tratados como rmparâmetros.
Artyom
Não funcionou amigo ........ tr: operando extra monu.txt' Try tr --help 'para mais informações. Operando rm: ausente Tente `rm --help 'para obter mais informações. ........ Isso é tudo o que eu posso ver #
2100
1
Talvez você tenha perdido o <antes do nome do arquivo?
Jonas Berlin
Também melhorei um pouco o comando xargs - acrescentou - de acordo com a sugestão do @artyom e adicionei -r para garantir que ele não execute o rm se não houver arquivos a serem removidos.
Jonas Berlin
5

A resposta acima é ótima, pois faz todo o possível para lidar com nomes de arquivos com espaços e "caracteres estranhos". Mas a maneira mais simples, se os nomes dos arquivos são sãos, é apenas (aviso, basismo!):

rm $(< /the/file/with/names)

Para casca regular:

rm `cat /the/file/with/names`
vonbrand
fonte