Como você executa uma execução seca da rm para ver quais arquivos serão excluídos?

87

Eu quero ver quais arquivos serão excluídos ao executar um rmno linux. A maioria dos comandos parece ter uma opção de execução a seco para mostrar exatamente essas informações, mas não consigo encontrar essa opção rm. Isso é possível?

Cory Klein
fonte
Eu também gostaria de ver quais arquivos gerarão erros por falta de permissões.
Simon Woodside

Respostas:

121

Digamos que você queira executar:

rm *.txt

Você pode simplesmente executar:

echo rm *.txt

ou mesmo apenas:

echo *.txt

para ver quais arquivos rmexcluiriam, porque é o shell que está expandindo o *.txt, não rm.

A única vez que isso não vai ajudá-lo é para rm -r.

Se você deseja remover arquivos e diretórios recursivamente, poderá usar em findvez de rm -r, por exemplo

find . -name "*.txt" -print

se fizer o que você deseja, altere -printpara -delete:

find . -name "*.txt" -delete
Mikel
fonte
find é uma boa escolha IMO. E se você quiser uma apresentação gráfica, use tree.
Noisebleed
2
Quase perfeito. find . -name "*.txt" -deletenão parece ser recursivo. Removidos todos os arquivos, mas não remover diretórios que foram listadas em-print
Oscar Godson
1
@OscarGodson Assumindo que os diretórios foram deixados vazios após a remoção dos arquivos, você pode removê-los comfind . -type d -empty -delete
datguy
1
@OscarGodson - findnão excluirá diretórios que ainda contêm arquivos (equivalente a rm dir/sem -r). Você teria que esvaziar o diretório em primeiro lugar - ou usar findpara -exec rmcom as opções apropriadas para fazer isso. por exemplofind . -depth -name "*.txt" -exec rm -r {} +
shalomb 17/04
O uso do echo rm *.txtmétodo parece ter uma desvantagem. Apresenta os resultados em uma lista concatenada (uma sequência longa com um arquivo após o anterior), em oposição a uma lista vertical. Existe alguma maneira de exibir a saída em uma lista vertical (um arquivo por linha)? (UPDATE: Eu vejo que o findmétodo faz o que eu tenha solicitado Então, eu vou correr com isso..)
inspirednz
16

Você pode dizer:

rm -i

para executá-lo no modo interativo, rmsolicitará que você confirme se cada arquivo deve ser excluído. Você poderia simplesmente responder não a cada arquivo para ver quais seriam afetados.

Justin Ethier
fonte
8
Isso é bastante difícil com um grande número de arquivos.
Cory Klein
9
sim n | rm -i #comentário para encontrar a duração mínima do comentário #
Joshua
4

Você pode usar lspara listar todos os arquivos que serão removidos por rm:

ls ../path/*.txt

Se você precisar listar para visualizar os arquivos que serão excluídos com uma recursiva rm, use o -Rsinalizador com ls:

ls -R ../path/*.txt
Veneet Reddy
fonte
Bom ponto. Embora se você sabe o nível de aninhamento, então você pode conseguir isto,ls */*/*.txt
Veneet Reddy
1
Você está certo. Com a -Ropção
Veneet Reddy