Para um determinado diretório, a solicitação é imprimir os caminhos completos dos arquivos e diretórios
por exemplo, para
/a/b/c/
file1
file2
dir1/
O comando deve mostrar
/a/b/c/file1
/a/b/c/file2
/a/b/c/dir1
A forma disso seria
ls -<something> .
ou
ls -<something> /a/b/c
Eu pensaria que isso seria trivial de alcançar, mas não achei ter examinado todos os ls
interruptores. Eu perdi - ou algo mais deveria find
ser usado?
find
pode fornecer o formato desejado quase por padrão. É obrigatório usar nomes de caminho que comecem com o caminho que você forneceu, então forneça/a/b/c
:que é equivalente a
Existem dois problemas aqui:
/a/b/c
também será impresso.find
funciona recursivamente. Não está claro sedir1
no seu exemplo está vazio ou seu conteúdo foi omitido. Você pode ou não querer recursão.O problema pode ser resolvido por
-mindepth 1
e-maxdepth 1
respectivamente, se vocêfind
os suportar:Essas opções não são exigidas pelo POSIX. Com POSIX
find
você pode suprimir a impressão/a/b/c
com! -path /a/b/c
; e você pode "emular"-maxdepth 1
seguindo isto: Limite a localização do POSIX a uma profundidade específica?Esta é uma solução POSIX:
A sola
/a/b/c
não passará no! -path
teste. Tudo o que passar será podado, para que a ferramenta não desça mais fundo.Fornecer o caminho inicial como
/a/b/c/
(observe a barra final) exige que você use! -path /a/b/c/
(também com uma barra final) porquefind
é obrigado a se referir ao caminho inicial exatamente como foi fornecido./a/b/c/
não combina/a/b/c
e vice-versa. Lembre -se-path
de tratar o argumento como um padrão, isso é importante se o seu caminho inicial contiver*
caracteres literais ou outros usados em Pattern Matching Notation .Você solicitou um formato específico, então talvez queira analisar a saída. Nesse caso,
find
é sua ferramenta els
definitivamente não é, porque você não deve analisar a saída dels
. Se o seufind
for GNUfind
, verifique aUNUSUAL FILENAMES
seção emman 1 find
. Considere-print0
.Em um comentário, você recebeu um link para esta pergunta . Muitas soluções exigem o fornecimento de um caminho para alguma ferramenta (como
readlink
). Se o caminho original vier dels
, já é um ato de "análisels
" – não recomendado.No entanto, as ferramentas desta outra pergunta podem ser úteis no seu caso para transformar um caminho relativo como
./c
ouc
um caminho completo como/a/b/c
. Em seguida, você fornece o caminho completo parafind
.