Como posso obter uma lista de arquivos que correspondam a uma lista de expressões regulares?

0

Eu quero ver o que não está sendo feito backup usando expressões regulares. A lista está aqui: link

Eu tentei

$ cat | xargs -L 1 echo find /cygdrive/c/Users/Chloe -regex -name

E colei a lista de expressões regulares, que parecia bem. Quando eu removi o echo , ele deu o erro

find: paths must precede expression: .*/(?:42|d{8,}).*/(?:cp|~).*

Eu tentei uma linha manualmente e consegui

$ find /cygdrive/c/Users/Chloe -regex -name .*.part
find: paths must precede expression: .*.part

Eu também tentei usar citações

$ find /cygdrive/c/Users/Chloe -regex -name '.*.part'
find: paths must precede expression: .*.part

Eu também tentei alterar a ordem

$ find -regex -name '.*.part' /cygdrive/c/Users/Chloe
find: paths must precede expression: .*.part

Então, como encontro todos os arquivos que correspondem a todas essas expressões regulares? Eu sei que alguns comandos permitem que você especifique @file como um argumento para obter a opção de linha de comando de um arquivo, mas eu não vi isso na página find man.

    
por Chloe 07.10.2017 / 07:54

1 resposta

2

Isso funcionou

$ cat | xargs -L 1 -d \n find 2>/dev/null /cygdrive/c/Users/Chloe -regex
  • -L 1 significa processar apenas 1 argumento por vez para cada comando find e não agrupar os argumentos em uma linha de comando gigante
  • -d \n significa usar nova linha como separador de argumentos porque alguns dos argumentos de entrada possuem espaços. Você tem que usar barra invertida dupla para não ser interpretado pelo shell imediatamente.
  • 2>/dev/null evita erros como 'impossível ler diretório ...'
  • -regex significa usar expressão regular para o nome do arquivo. Aparentemente, -regex e -name são mutuamente exclusivos, embora eu tenha usado expressões regulares com -name antes.

Cole apenas a lista de expressões regulares e termine com enter e ^D .

    
por 07.10.2017 / 08:36