Uma das ferramentas mais básicas para localizar arquivos (ou outros tipos de nós) é o utilitário find
.
find ./ -type f -name '*[!0-9][0-9].txt'
Isso pesquisará:
- ... recursivamente a partir do diretório atual (
./
). Você pode alterar isso para outro caminho ou até mesmo deixá-lo, pois esse é o valor padrão para a maioria das versões defind
. - ... para itens que são arquivos ao contrário de diretórios, nós de dispositivos, links simbólicos, etc. (
-type f
). Você poderia deixar isso se quisesse encontrar outros tipos também. - ... para itens que correspondem ao padrão de nome fornecido. Note que eu usei aspas simples para encobrir o padrão para que o bash ou seu shell não tentem explandá-lo para um padrão glob antes mesmo de encontrar o comando. A estrela corresponde a qualquer número de caracteres, então o final do arquivo deve ser algo diferente de um dígito, depois um dígito e, em seguida, sua extensão. (
-name '*[0-9].txt'
)
Se houver arquivos cujo nome é apenas um dígito seguido por .txt
, o comando acima os perderá, porque requer um não dígito antes do dígito. Os seguintes comandos equivalentes usam operadores booleanos para incluir nomes de arquivos com apenas um dígito ( -o
é “ou” e !
é “não”):
find ./ -type f \( -name '*[!0-9][0-9].txt' -o -name '[0-9].txt' \)
find ./ -type f -name '*[0-9].txt' ! -name '*[0-9][0-9].txt'
Observe que isso diferencia maiúsculas de minúsculas. Se você quiser uma correspondência insensível, use -iname
em vez de -name
para corresponder também a file4.TXT
. Também esteja ciente de que só porque um arquivo afirma ser um arquivo de texto com essa extensão não significa que é. No linux, qualquer arquivo pode ser qualquer tipo, não importa o nome. Também pode haver arquivos de texto com outras extensões ou sem nenhuma extensão.