Como exibir todos os nomes de arquivos regulares existentes em um arquivo de texto?
Exemplo:
$ cat file.txt
zzz
xxx/yyy
234 546
"abc def"
--bbb
$ cat file.txt | <one-liner>
zzz
xxx/yyy
Nesta lista de file.txt
arquivos regulares zzz
e xxx/yyy
existem (por exemplo). Portanto, as <one-liner>
exibições zzz
e xxx/yyy
.
O que seria uma implementação disso, de preferência como um one-liner
?
Eu rapidamente tentei brincar com algo parecido xargs -I {} --max-lines=1 test -f "{}"
. No entanto, parece que não é o caminho certo.
O ponto de partida para isso poderia ser um loop simples:
Isso poderia ser quebrado em uma única linha em detrimento da legibilidade:
Ou você poderia usar Perl:
Aqui está uma maneira:
E claro, você pode colar em uma linha, se preferir:
Você também pode usar a
cat file.txt | command
abordagem, se quiser. Algo como:Com
zsh
:Imprimiria aqueles arquivos que podem ser encontrados independentemente do tipo.
Para limitar a arquivos regulares. Ou:
Para incluir também links simbólicos que eventualmente sejam resolvidos em arquivos regulares (como
[ -f
acontece).Substitua
.
por^/
arquivo de qualquer tipo, exceto diretório (arquivos normais, links simbólicos, fifos, soquetes...).Com outros shells, para arquivos de qualquer tipo, com GNU
xargs
els
:Com GNU
find
4.9 ou mais recente:Para arquivos que podem ser considerados do tipo regular após a resolução do link simbólico.