Basta encontrar o seu arquivo e retornar o nome do diretório:
find -name 'level.dat' -exec dirname {} \;
Como posso encontrar todas as subpastas que contêm um determinado arquivo?
Por exemplo, em uma instalação de servidor Minecraft, os mundos diferentes são armazenados em subpastas com nomes arbitrários. Para identificar que uma dada pasta representa um mundo, eu tenho que procurar por um level.dat
dentro dela. Existe um comando que encontre todos os arquivos level.dat
e retorne as pastas que os contêm?
Ou encontre seus arquivos e extraia os nomes dos diretórios em massa:
find
starting_directory–name level.dat –print | sed 's@/level.dat$@@'
find ~ -type f -name "level.dat" -printf '%h\n'
se houver mais de um arquivo com esse nome, envie para uniq
Ou implemente você mesmo;)
myfind(){ shopt -s nullglob; [[ -f $1 ]] && pwd; for i in */ ; do ( cd $i;myfind $1 ) done }
myfind level.dat
Você pode usar find
para imprimir apenas arquivos que passam por um determinado teste. Eu gosto dessa abordagem:
find . -type d -execdir test -f {}/level.dat \; -print
Isso encontra todos os diretórios, que contém um arquivo chamado level.dat
.
Tags find