Como especificar o caminho do arquivo com find ao procurar por arquivos com -regex

3

Eu quero pesquisar em um diretório por alguns arquivos usando find e uma expressão regular.

Se eu fizer

cd dir
find -E . -type f -regex '^\..*[^~]'

Eu recebo uma lista de arquivos no diretório que correspondem à expressão regular.

No entanto, se eu fizer

find -E ~/dir -type f -regex '^\..*[^~]'

ou seja,

find -E /home/adam/dir -type f -regex '^\..*[^~]'

Eu não recebo saída. Como especifico o diretório a ser pesquisado por find ao usar uma expressão regular?

Isso é BSD find , como eu estou em um Mac.

    
por Adam Liter 20.07.2014 / 04:57

1 resposta

5

O argumento para -regex precisa corresponder ao caminho inteiro encontrado. Um comando como find . encontra caminhos como ./dir/subdir/somefile , enquanto um comando como find ~/dir encontra caminhos como /home/adam/dir/subdir/somefile . Então seu regexp tem que combinar com o /home/adam part no começo.

O comando find -E . -type f -regex '^\..*[^~]' localiza arquivos cujo nome não contém uma nova linha e não termina com ~ . O . no início sempre corresponde desde que o caminho começa com ./ .

Se você estivesse procurando por arquivos de ponto, precisaria permitir um prefixo de diretório. O comando a seguir mostra arquivos de pontos cujo nome não termina em ~ :

find -E /whatever -regex '(\n|.)*/\.[^/]*[^~]'

Mas isso é mais simples de expressar com -name :

find /whatever -name '.*[!~]'
    
por 20.07.2014 / 05:05

Tags