Remove todos os arquivos cujos nomes correspondam a um padrão específico

0

Estes são arquivos em meu diretório pessoal:

23233.txt
3233.txt
ba233.txt
kh23.txt
khalith
main.sh
s2233.txt
tr233.txt
WWW.txt

Como posso remover todos os arquivos cujos nomes começam com duas letras minúsculas, seguidos por dois dígitos e a extensão .txt , por exemplo, kh23.txt ?

    
por Khalith Basha 16.06.2017 / 15:08

2 respostas

1

E sobre isso?

find /path/to/parent/dir/ -regextype posix-extended -regex '.*/[a-z]{2}[0-9]{2}\.txt' -exec rm {} \; 
    
por 16.06.2017 / 15:17
4

O padrão que você pode estar procurando é

[a-z][a-z][0-9][0-9].txt

Isso corresponderá a qualquer nome no diretório atual, consistindo de exatamente dois caracteres minúsculos, seguidos de dois dígitos, seguidos da string literal .txt .

Os padrões globbing de nome de arquivo são, diferentemente das expressões regulares, automaticamente ancorados no início e no final da string, portanto não precisamos dizer nada de especial sobre os nomes de arquivos que não possuam caracteres antes do primeiro caractere minúsculo ou após o caractere .txt .

Você pode usar esse padrão com rm diretamente:

$ rm "$HOME"/[a-z][a-z][0-9][0-9].txt

ou, se quiser recorrer a todos os subdiretórios, com find :

$ find "$HOME" -name "[a-z][a-z][0-9][0-9].txt" -delete

Se a sua implementação de find não der suporte a -delete , considere o seguinte:

$ find "$HOME" -name "[a-z][a-z][0-9][0-9].txt" -exec rm {} +

PS: Use a palavra dígito quando você quer dizer um número entre zero e nove. Um número é um pouco vago, especialmente porque o 233, que faz parte de vários nomes de arquivos de exemplo, é um número. (já editei a pergunta para remover essa ambigüidade)

    
por 16.06.2017 / 15:14