Estou um pouco perplexo a respeito de porque ninguém postou ainda, mas de fato bash
tem recursos recursivos, se você habilitar a opção globstar
e usar **
glob. Como tal, você pode escrever (quase) puro bash
script que usa esse globstar recursivo assim:
#!/usr/bin/env bash
shopt -s globstar
for i in ./**/*
do
if [ -f "$i" ];
then
printf "Path: %s\n" "${i%/*}" # shortest suffix removal
printf "Filename: %s\n" "${i##*/}" # longest prefix removal
printf "Extension: %s\n" "${i##*.}"
printf "Filesize: %s\n" "$(du -b "$i" | awk '{print }')"
# some other command can go here
printf "\n\n"
fi
done
Observe que aqui usamos a expansão de parâmetro para obter as partes do nome do arquivo desejadas e não estamos contando com comandos externos, exceto para obter o tamanho do arquivo com du
e limpar a saída com awk
.
E ao atravessar sua árvore de diretórios, sua saída deve ser algo assim:
Path: ./glibc/glibc-2.23/benchtests
Filename: sprintf-source.c
Extension: c
Filesize: 326
Regras padrão de uso de script se aplicam: verifique se ele é executável com chmod +x ./myscript.sh
e execute-o a partir do diretório atual via ./myscript.sh
ou coloque-o em ~/bin
e execute source ~/.profile
.