E sobre isso?
find /path/to/parent/dir/ -regextype posix-extended -regex '.*/[a-z]{2}[0-9]{2}\.txt' -exec rm {} \;
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
?
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)