Os arquivos 'rm *' removem todas as correspondências de todos os subdiretórios?

12

Eu quero remover qualquer arquivo que se pareça com wordpress-891.sql do diretório atual (não dentro de subdiretórios).

Será que rm wordpress-*.sql fará o truque ou removerá correspondências de subdiretórios?

    
por HorusCoding 28.05.2017 / 21:28

4 respostas

20

Não. A globulação normal * não é recursiva e nem é rm .

Se um nome de diretório corresponder, ele não será removido - você precisará do sinalizador -r para excluir um diretório.

Por isso, é seguro fazer isso se tiver certeza de que deseja excluir esses arquivos.

Você também pode tornar rm interactive

rm -i wordpress-*.sql

então pedirá confirmação antes de deletar cada arquivo

    
por Zanna 28.05.2017 / 21:35
14

Sim, ele faz o truque para você e remove todos os arquivos com esse esquema no diretório atual. E NÃO, não remove arquivos nos subdiretórios.

Sempre que você não tem certeza do que acontece quando você executa um comando como:

rm wordpress-*.sql

depois é só executá-lo usando ls :

ls wordpress-*.sql

os arquivos que você vê na saída são os que serão removidos.

Quando você está tentando obter uma lista como: foo* , é melhor usar a opção -d com ls para evitar listar arquivos em um diretório chamado foobar/ etc.

ls -d foo*

Esse truque funciona para comandos que não são usados para fazer o trabalho recursivamente.

A outra coisa que você pode fazer é digitar sua entrada desejada, por exemplo: wordpress-* e depois pressionar Ctrl + Alt + * , e agora todas as correspondências são digitadas automaticamente na frente do seu comando.

    
por Ravexina 28.05.2017 / 21:54
12

Não, rm não recorre por subdiretórios.

Consulte Excluir arquivos correspondentes em todos os subdiretórios - SuperUser para obter métodos para excluir arquivos em subdiretórios.

Se você estiver preocupado com a exclusão acidental de algo importante, use gvfs-trash (que envia arquivos para a lixeira) em vez de rm (que exclui arquivos permanentemente).

    
por wjandrea 28.05.2017 / 21:32
-1

Se você quiser encontrar e excluir todos os arquivos correspondentes, como wordpress-*.sql , você pode usar o comando find . :)

Por exemplo, você deseja remover todos os arquivos correspondentes com wordpress-*.sql em test_dir , faça o seguinte.

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

Sempre que o programa find realmente encontrar um arquivo correspondente, ele tentará executar um comando após a opção -exec . Nesse caso, rm -f {} será executado e {} será alterado para o nome do arquivo de correspondência. Por exemplo.

rm -f wordpress-169.sql

Você também pode definir a profundidade dos subdiretórios com a opção -maxdepth .

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

Por favor, note que você deve especificar a opção -maxdepth antes de outras opções. Caso contrário, você pode encontrar os resultados que você realmente não quer ver.

    
por Sung-Jin Park 30.05.2017 / 07:40