Encontrando arquivos no linux baseados em regex, com múltiplas alternativas

1

Digamos que eu tenha uma lista de strings. Eu quero encontrar arquivos com nomes de arquivos começando com essas seqüências de caracteres.

Exemplo,

Cordas: filename.could.start.with.this.restoffilename a.file.could.have.this.at.beginning.restoffilename

Esta lista de strings pode ser um número arbitrário (obviamente muito mais do que apenas dois como acima).

Eu quero usar um script bash para isso e usar apenas o que eu considero aplicações linux básicas (ls, grep, sed, find etc.), então não python, perl, ruby ou outras linguagens como essas.

    
por JaHei 09.05.2011 / 00:40

2 respostas

2
prefixes=("filename.could.start.with.this" "a.file.could.have.this.at.beginning")

# Turn the prefix array into a find expression (in array form)
matchlist=()
for prefix in "${prefixes[@]}"; do
    matchlist+=("-o" "-name" "$prefix*")
done
matchlist=("${matchlist[@]:1}") # remove the extra "-o" from the beginning

# Search the current directory for plain files with names starting with one of the prefixes
find -x . "(" "${matchlist[@]}" ")" -type f

Se a sua lista de prefixos de nomes de arquivo não estava no formato de matriz, você teria que modificá-la apropriadamente, por exemplo,

prefixes="filename.could.start.with.this a.file.could.have.this.at.beginning"

...
for prefix in $prefixes; do
...

Além disso, isso não se comportará bem se for fornecida uma lista vazia de prefixos de nome de arquivo; Se essa for uma possibilidade, verifique primeiro essa condição.

    
por 09.05.2011 / 01:46
0

BASH FAQ entry # 50: "Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!"

Continue adicionando predicados de find ao array até receber seu comando.

    
por 09.05.2011 / 00:43