'rm files*' remove todas as correspondências de todos os subdiretórios?

'rm files*' remove todas as correspondências de todos os subdiretórios?

Quero remover qualquer arquivo que pareça estar wordpress-891.sqlno diretório atual (não dentro de subdiretórios).

Funcionará rm wordpress-*.sqlou também removerá correspondências de subdiretórios?

Responder1

Não. O globbing normal *não é recursivo e nem é rm.

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

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

Você também pode tornar rminterativo

rm -i wordpress-*.sql

então ele pedirá confirmação antes de excluir cada arquivo

Responder2

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

Sempre que você não tiver certeza do que acontece ao executar um comando como:

rm wordpress-*.sql

então basta 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 -dswitch with lspara evitar listar arquivos em um diretório chamado foobar/etc.

ls -d foo*

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

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

Responder3

Não, rmnão recorre a subdiretórios.

VerExclua os arquivos correspondentes em todos os subdiretórios - SuperUserpara métodos de exclusão de arquivos em subdiretórios.

Se você estiver preocupado em excluir acidentalmente algo importante, use gvfs-trash(que envia arquivos para a lixeira) em vez de rm(que exclui arquivos permanentemente).

Responder4

Se desejar localizar e excluir todos os arquivos correspondentes, como wordpress-*.sql, você pode usar findo comando. :)

Por exemplo, você gostaria de remover todos os arquivos correspondentes wordpress-*.sqlem test_dir, faça o seguinte.

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

Sempre que findo programa realmente encontra um arquivo correspondente, ele tenta executar um comando após -execa opção. Neste caso rm -f {}será executado e {}será alterado para o nome do arquivo correspondente. Por exemplo

rm -f wordpress-169.sql

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

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

Observe que você deve especificar -maxdeptha opção antes de outras opções. Caso contrário, você poderá obter resultados que realmente não deseja ver.

informação relacionada