Isso é trivial:
find /directory -type f
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.
Isso é trivial:
find /directory -type f
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)
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".
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