Encontre pastas contendo um arquivo

2

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?

    
por Vegar 12.01.2013 / 01:26

5 respostas

7

Basta encontrar o seu arquivo e retornar o nome do diretório:

find -name 'level.dat' -exec dirname {} \;
    
por 12.01.2013 / 01:35
2

Ou encontre seus arquivos e extraia os nomes dos diretórios em massa:

find starting_directory –name level.dat –print | sed 's@/level.dat$@@'

    
por 12.01.2013 / 01:41
1
    find ~ -type f -name "level.dat" -printf '%h\n'

se houver mais de um arquivo com esse nome, envie para uniq

    
por 12.01.2013 / 05:37
1

Ou implemente você mesmo;)

myfind(){ shopt -s nullglob; [[ -f $1 ]] && pwd; for i in */ ; do ( cd $i;myfind $1 ) done }
myfind level.dat
    
por 12.01.2013 / 02:00
0

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 .

    
por 05.04.2013 / 13:01

Tags