Exclui todos os arquivos no diretório atual com nomes de 2 caracteres usando o bash

0

Como faço para emitir um comando em bash ro excluir todos os arquivos no diretório atual com nomes de 2 caracteres?

Eu fiz todas as combinações possíveis em que posso pensar:

rm -r ?? .
rm -r [??].
rm -r ??.

Eu não estou listando os outros que criei, mas estou sem ideias aqui.

    
por 0cu1us 03.10.2014 / 03:31

2 respostas

3

Eu perguntei em um comentário acima se isso era para remover nomes de arquivos de dois caracteres no diretório atual ou no diretório atual e subdiretórios. Vou listar as duas soluções aqui:

Para excluir arquivos que tenham um nome de arquivo com 2 caracteres no diretório atual

rm ??

Para excluir arquivos que tenham um nome de arquivo com dois caracteres no diretório atual, bem como subdiretórios:

find . -name '??' -exec rm -rf {} \;

Esse é um pouco mais complicado, já que os nomes dos arquivos assumem o caminho à medida que você percorre os subdiretórios. Em vez de tentar descobrir isso com o comando rm , usamos find pelo nome com o ?? para o caractere curinga de 2 caracteres e usamos a opção -exec para fazer o rm no que for encontrado% código%.

    
por 03.10.2014 / 03:41
0

Use find com exec . Primeiro, faça um teste como esse para ter certeza de que você não está agindo de acordo com as coisas que você não quer atuar:

find . -maxdepth 1 -type f -name '??' -exec ls -latr {} \;

Então, quando você tem certeza de que funciona do jeito que você deseja, corra isso:

find . -maxdepth 1 -type f -name '??' -exec rm -rf {} \;

Além disso, preste atenção a maxdepth . Isso conterá suas ações apenas para o diretório atual. Sem maxdepth , o comando find irá correr por todo o seu sistema, fazendo o que quer que seja para dois nomes de arquivos de caracteres. Obviamente, aumente maxdepth para corresponder à profundidade desejada, mas lembre-se de que você corre o risco de danificar seu sistema se não usar isso e fazer alguns testes de execução a seco na lógica find antes de executar o rm -rf .

Com o GNU find (que está na maioria das distribuições do Linux), você também pode usar a opção -delete em vez de -exec rm -rf {} \; . -delete poderia ser um pouco mais efetivo porque não precisa chamar um comando externo, mas não faz parte da especificação POSIX.

    
por 03.10.2014 / 03:43

Tags