Eu estou tentando lista de todos os arquivos dir1
, dir2
, dir3
e dir4
que pode ser em qualquer lugar como um sub-diretório do meu cwd
usando o find
comando. Eu tentei o seguinte sem sucesso:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Eu tentei posix-extended
também. Como posso listar esses arquivos?
bash
find
regular-expression
Aaron
fonte
fonte
Respostas:
E se você quiser procurar três pastas com o nome
foo
,bar
ebaz
para todos os*.py
arquivos, use este comando:find foo bar baz -name "*.py"
então, se você deseja exibir arquivos de
dir1
dir2
dir3
usofind dir1 dir2 dir3 -type f
tente isso
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
fonte
./dir
vez dedir
./path/to/dir1
), caso em./dir1
que não existiria.É melhor usar a diretiva -path:
O que significa: encontre todos os arquivos no diretório atual, onde há 'dir1' ou 'dir2' ou 'dir3' ou 'dir4' no caminho.
fonte
-a
e-o
para o equivalente padrão de GNU's-and
/-or
.Apenas para que todos saibam. A adição de
.*/
antes de cada umdir
resolveu o problema, pois eleregex
corresponde ao caminho completo que parece.fonte
Esta é a minha primeira ideia depois de ler as respostas anteriores:
Isso leva em consideração que a regex deve corresponder ao nome do arquivo inteiro e é mais fácil entender.
fonte
Amostra de localização rápida (!) De arquivos específicos (access_log) em vários locais definidos por curinga (diretório inicial) e diretório de log geral do apache2, aplicando também a filtragem de nomes para excluir logs ssl e logs antigos compactados com gzip. Não responde diretamente à pergunta aqui, mas pode ser útil para alguém que encontrou essas instruções (como eu).
Tenha cuidado com os espaços, especialmente perto de
\(
e\)
.A propósito, eu o usei no apachetop, para encontrar os sites mais ativos no meu servidor.
fonte
você não precisa especificar dir1 para dir4 pelo nome, se estiver usando regextype
type f
: encontre arquivos e não diretóriosregextype sed
: usa sed regextyperegex
: pesquisa usando regex em todo o caminho".*/dir[1-4]/[a-z0-9]*"
:. * no início significa qualquer número de caracteres que possam ser do tipo (caractere / número / barra invertida (/) etc); dir [1-4] significa procurar por "dir" seguido de um número entre 1 e 4; / [^ /] * afirma que o seguinte diretório1-4 omite os nomes de caminho que possuem / neles, portanto, ele retorna apenas arquivos no diretório dir1-dir4 e ignora os subdiretórios que possam estar no diretório dir1-dir4.criou um diretório para você testá-lo: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
fonte
red
,green
,blue
eyellow
, ou poderiam serJohn
,Paul
,George
eRingo
.) A sua resposta assume que eles são , literalmentedir1
,dir2
,dir3
edir4
. ... (continua)foo_bar
,foo.txt
eFOO
)? (4) Por que seu texto explica/[^/]*
quando sua resposta não o utiliza?Eu sei que você especificou que usando find, mas apenas para mostrar outras opções que podem ser usadas, você pode usar xargs:
Você pode ter um arquivo chamado "pastas" que contenha algo como:
Então, você pode fazer algo assim:
xargs na minha opinião, me sinto mais versátil do que encontrar -exec. Além disso, você pode fazer algumas coisas loucas como
fonte