Encontre um aninhamento específico de nomes de diretório, por exemplo, … / Project / dir1 / dir2

3

Estou tendo alguns problemas com o comando find ; Eu não sei muito bem a sintaxe e preciso usá-la em um script para encontrar uma estrutura de diretório específica que possa estar localizada em qualquer lugar.

Basicamente, eu tenho uma estrutura como "project / dir1 / dir2" que eu sei que será sempre exatamente aqueles três diretórios, com os mesmos nomes, nessa ordem. O que pode não ser o mesmo é quão profunda esta estrutura está aninhada; por exemplo, você poderia ter:

$HOME/project/dir1/dir2

ou

$HOME/workspace/project/dir1/dir2

Basicamente, eu preciso de uma maneira geral de localizar a estrutura project/dir1/dir2 , não importando quão profundamente esteja enterrada.

Isso sempre estará no Ubuntu. Pensei em usar o locate, mas teria que garantir que o db do locate está sempre atualizado.

    
por Doug Stephen 01.11.2013 / 17:37

1 resposta

6

Se você usou find -name project/dir1/dir2 , encontrará uma mensagem como esta:

find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that -name 'project/dir1/dir2' will probably evaluate to false all the time on this system. You might find the -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -print0 | grep -FzZproject/dir1/dir2''.

Portanto, oferece certas alternativas para essa tarefa. Estranho, não menciona o comando -path para encontrar:

find -path "*/project/dir1/dir2" -print

Por favor, observe o */ no começo. Estes dizem encontrar para imprimir qualquer caminho que termina com /project/dir1/dir2 e o nome do primeiro diretório tem que ser project caso contrário ele encontrará myproject/dir1/dir2 e tal.

    
por 01.11.2013 / 18:14