Comando shell para obter todos os arquivos de uma estrutura de diretório complexa

5

Estou procurando um comando shell para obter todos os arquivos em uma estrutura de diretório complexa. Por estrutura de diretório complexa, quero dizer que há uma pasta raiz com mais de 150 subpastas e, para cada subpasta, há no mínimo três subpastas.

    
por manatwork 15.03.2013 / 17:08

4 respostas

18

Isso é trivial:

find /directory -type f
    
por 15.03.2013 / 17:09
8

Como sugerido por @ michael-hampton find é o caminho a percorrer. No entanto, um pouco mais de explicação é necessária. A opção -type pode ter vários valores, verifique a man page ( man find ). Aqui está uma definição rápida:

Se você estiver procurando apenas arquivos regulares:

find <path> -type f

Se você estiver procurando por algo que não seja um diretório:

find <path> ! -type d

Se você estiver procurando por arquivos regulares e links simbólicos:

find <path> -type f -o -type l

(o comando anterior procura link OR regular)

    
por 15.03.2013 / 18:00
3

find funciona igualmente bem. Mas se você estiver usando zshell ( zsh ):

Apenas para arquivos:

ls -al path/**/*(.)

Apenas para dirs:

ls -al path/**/*(/)

Veja man zshexpn para mais eamples. Especificamente, a seção "qualificador glob".

    
por 15.03.2013 / 18:51
1

Você também pode fazer isso no bash4 + (esteja ciente de que isso segue links simbólicos):

shopt -s globstar nullglob
for file in **/*; do
    [[ -f $file ]] && printf '%s\n' "$file"
done
    
por 15.03.2013 / 18:51

Tags