Use apenas ! -type d
:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) -prune -o \
! -type d -print
Pergunta simples: estou executando o seguinte comando de localização:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) \
-prune -o \
-print
Para listar todos os arquivos no meu diretório, excluindo os diretórios especificados.
Isso funciona muito bem, no entanto, o que eu também quero é excluir quaisquer diretórios reais da saída, portanto, se houver uma estrutura de diretórios da seguinte forma:
test
-- foo.text
-- bar.text
quando executo meu comando, gostaria de ver:
./test/foo.text
./test/bar.text
em vez de:
.
./test
./test/foo.text
./test/bar.text
Alguém pode ajudar?
Use apenas ! -type d
:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) -prune -o \
! -type d -print
find . -type f
fará isso. Você pode fazer exec se quiser operar em nomes de arquivos.
Aqui está uma maneira de fazer isso. Eu estou piping sua saída de find
(usando xargs
) para um pouco de bash que faz a pergunta "Isto não é um diretório?" e, se não for, faz eco no seu terminal.
Aqui está toda a explosão:
find . -type d \( -path ./.git -o -path ./log -o -path ./public -o -path ./tmp \) -prune -o -print | xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'
Aqui está minha adição:
xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'
Para explicar:
xargs -i
replace string "{}" com argumentos (aqueles que são canalizados)
bash -c
comandos lidos da string
if [ ! -d "{}"];
é um diretório.
echo "{}"
ecoa o resultado da pesquisa.
fi;
terminar se.
Tags find search linux file-search