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.


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.


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`
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.