Passei dias neste cubo de Rubik. Qualquer coisa que eu faça para corrigir um problema quebra outro.
Estou no MacOS X 10.5 a 10.14 compatível com POSIX. Estou chamando isso de um script Perl em um contexto de
system ("find blah blah > FILENAME");
Eu preciso do Unix 'find' para fazer todas essas coisas de uma vez.
- comece em uma raiz de volume, por exemplo
/Volumes/My HD
- não cruze sistemas de arquivos
- imprimir apenas arquivos, não diretórios ou links simbólicos
- nem desça em vários diretórios como
net dev system
. (Ou seja, não explore /Volumes/foo/dev/ mas explore /Volumes/foo/Users/Jim/ dev /github/twonky/) - o ponto inicial pode conter espaços
No momento, estou fazendo o seguinte: (dividido em várias linhas para facilitar a leitura; na verdade, é uma linha longa)
Find -x '/Volumes/foo/'
-path '/Volumes/foo//dev/*' -prune
-path '/Volumes/foo//net/*' -prune
-path '/Volumes/foo//system/*' -prune
-o -type f -print
A razão para o double / é que a impressão de find inclui o // porque o ponto inicial termina em um /. Os caminhos de Prune devem concordar, ou não combinarão. Por que o ponto de partida termina em /? Porque se isso não acontecer, find falha em qualquer ponto de partida com um espaço no nome, como "Meu HD". Tentei isso.
No momento, find exclui apenas o primeiro diretório da lista. O resto, apenas ignora. Atualmente estou testando no OS X 10.5, mas preciso de algo que funcione em todos os lugares.
Várias ameixas + arquivos apenas + espaços em nomes de arquivos são uma ponte muito longe? Estou apenas pedindo muito de encontrar ?