Aqui está um exemplo de level0
conteúdo de diretório em um formato tipo árvore. No entanto, suponha que ele seja enorme e contenha muitos arquivos, pois estou omitindo muitos deles aqui:
$ tree level0
level0
└── level1
└── level2
└── sample.txt
Tentei grep
verificar alguns arquivos com grep, mas esta é a saída que recebi:
$ tree /tmp/level0 | grep sample
└── sample.txt
Entretanto, espero que a saída seja o caminho absoluto real /tmp/level0/level1/level2/sample.txt
.
Como posso obter o caminho absoluto do arquivo dentro de um diretório usando um comando?
O que eu faria:
Se você quiser o caminho real para possíveis links simbólicos:
Definir a
globstar
opção shell no Bash habilita o uso do**
operador globbing. Isso funciona exatamente como*
, mas corresponde a barras em nomes de caminho. Portanto, permite pesquisas recursivas.Isso permite criar uma matriz de nomes de caminhos correspondentes:
Defina também a
dotglob
opção shell para permitir a correspondência de nomes ocultos e abaixo de diretórios com nomes ocultos, enullglob
oufailglob
dependendo de como você queira lidar com padrões não correspondentes. A configuraçãonullglob
faria um padrão não correspondente se expandir para nada, e a configuraçãofailglob
faria um padrão não correspondente causar um erro "sem correspondência" (um script seria encerrado). Usar nenhuma dessas duas opções shell faria o shell manter o padrão não expandido como está.Você pode usar
"sample.txt"
ou"*sample*"
Para obter apenas o caminho :
find /tmp/level0 -type f -name "sample.txt" -exec dirname {} \;
Com
tree
:tree -fi /tmp/level0 | grep "sample.txt" | xargs dirname
Caminho e nome do arquivo:
find /tmp/level0 -type f -name "sample.txt"
Com
tree
:tree -fi /tmp/level0 | grep "sample.txt"