“find” output relativo ao diretório

25

Gostaria de usar find para listar todos os arquivos e diretórios recursivamente em uma determinada raiz para uma operação cpio . No entanto, não quero que o próprio diretório raiz apareça nos caminhos. Por exemplo, atualmente recebo:

$ find diskimg
diskimg
diskimg/file1
diskimg/dir1
diskimg/dir1/file2

Mas gostaria de obter

file1
dir1
dir1/file2

(note que o root também não está na saída desejada, mas é fácil se livrar de tail ).

Estou no OS X, e prefiro não instalar ferramentas extras (por exemplo, GNU find), se possível, já que gostaria de compartilhar o script que estou escrevendo com outros usuários do OS X.

Estou ciente de que isso pode ser feito com cut para cortar a listagem raiz, mas isso parece ser uma solução abaixo do ideal. Existe uma solução melhor disponível?

    
por nneonneo 12.12.2013 / 05:33

3 respostas

14

Se o que você está tentando fazer não é muito complexo, você pode fazer isso com o sed:

find diskimg | sed -n 's|^diskimg/||p'

Ou cut :

find diskimg | cut -sd / -f 2-
    
por 12.12.2013 / 05:42
23

cd no diretório primeiro:

cd diskimg && find . 

Após a conclusão, você estará de volta ao diretório raiz.

Seus arquivos serão prefixados com ./ neste caso; a única maneira que vejo por aí seria usar cut :

{ cd diskimg && find .; } | tail -n +2 | cut -c 3-

Use um subshell para evitar a mudança do diretório atual do seu shell (isto não é necessário se você estiver colocando a saída como o lado esquerdo de um pipe já executado em um subshell).

(cd diskimg && find .)
    
por 12.12.2013 / 05:42
20

Outra, mais complexa, mas usando apenas a abordagem find da minha outra resposta:

find diskimg -mindepth 1 -printf '%P\n'
    
por 12.12.2013 / 05:47

Tags