find "$DIR" -type d | while read d; do echo "$d,$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')"; done
Ou, em formato mais legível e usando uma variável extra para demonstração:
find "$DIR" -type d |
while read d;
do
files=$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')
printf '%s,%s\n' "$d" "$files";
done
Isso localiza todos os subdiretórios de $DIR
usando o comando find
. Para cada um encontrado, usa ls -tr
para obter uma lista de arquivos nesse diretório classificados por data, o mais novo primeiro.
Canalize a saída de ls -tr
para sed
unindo a primeira e a última linha com uma vírgula: A opção -n
suprime a saída padrão, 1h
salva a primeira linha (nome do arquivo mais novo) na retenção espaço , e na última linha do arquivo (selecionada por $
) acrescenta o espaço de espera (nome do arquivo mais novo) com H
ao espaço padrão (delimitado por uma nova linha) e altera essa nova linha para um vírgula.
O script então printf
s o nome do subdiretório seguido por uma vírgula, seguido pelos arquivos que saíram de sed
.
Isso não faz distinção entre diretórios e arquivos para a seleção mais antiga / mais nova, então se você não quiser diretórios lá, você precisará filtrar a saída de ls -t
para remover os diretórios.