Com gnu , você pode tentar:
find "$(pwd)" -mindepth 2 -maxdepth 2 -type d -printf "d%h find "$(pwd)" -depth -type f -printf "d%hfind "$(pwd)" -mindepth 2 -maxdepth 2 -type d -printf "d%h find "$(pwd)" -depth -type f -printf "d%h%pre%%T@ %p%pre%" | awk -v RS="%pre%" '
/^d/ {
directoryname=substr($0,2);
}
/^[0-9]/ {
if (!lmtimes[directoryname] || lmtimes[directoryname] < $1) {
lmtimes[directoryname]=$1;
lmtimefns[directoryname]=substr($0,index($0," ")+1);
}
}
END {
for (directoryname in lmtimefns) {
print lmtimefns[directoryname];
}
}'
%T@ %p%pre%" | awk -v RS="%pre%" '
/^d/ {directoryname=substr($0,2)}
/^[0-9]/ && (!lmtimes[directoryname] || lmtimes[directoryname] < $1) {
lmtimes[directoryname]=$1;
lmtimedns[directoryname]=substr($0,index($0," ")+1);
}
END {for (directoryname in lmtimedns) print lmtimedns[directoryname]}
'
%T@ %p%pre%" | awk -v RS="%pre%" '
/^d/ {
directoryname=substr($0,2);
}
/^[0-9]/ {
if (!lmtimes[directoryname] || lmtimes[directoryname] < $1) {
lmtimes[directoryname]=$1;
lmtimefns[directoryname]=substr($0,index($0," ")+1);
}
}
END {
for (directoryname in lmtimefns) {
print lmtimefns[directoryname];
}
}'
%T@ %p%pre%" | awk -v RS="%pre%" '
/^d/ {directoryname=substr($0,2)}
/^[0-9]/ && (!lmtimes[directoryname] || lmtimes[directoryname] < $1) {
lmtimes[directoryname]=$1;
lmtimedns[directoryname]=substr($0,index($0," ")+1);
}
END {for (directoryname in lmtimedns) print lmtimedns[directoryname]}
'
Esta versão foi testada contra nomes estranhos que contêm caracteres especiais: \n " etc.
$(pwd) execute pwd comando que imprime o caminho absoluto do diretório atual.
find $(pwd) procura o diretório atual, os nomes completos dos diretórios serão impressos
O filtro -mindepth 2 -maxdepth 2 -type d está selecionando apenas diretórios no segundo nível em que FOLDER no diretório atual estão no nível 1 e seus SUB_FOLDER no nível 2.
-printf "d%h imprime para cada SUBFOLDER%T@ %pd"FOLDER encontrado, estas informações abaixo:
last modif time in second since EPOCH[space] SUBFOLDER awk -v RS=""/^d/ {directoryname=substr($0,2)}regex d directoryname etc.
O FOLDER não pode ser parte de um nome, então este é o delimitador perfeito.
d está considerando printf como um Separador de Registros.
/^[0-9]/ : este regex é verdadeiro quando um registro começa com printf ; A variável $1 é atualizada com o nome [space] que é feito de todos os caracteres logo após o && (!lmtimes[directoryname] || lmtimes[directoryname] < $1) char, por construção, graças a SUBFOLDER .
FOLDER : este directoryname é verdadeiro quando um registro começa com um dígito. Por construção, graças a true , o primeiro campo ( directoryname : por exemplo, todos os caracteres até ̀ SUBFOLDER char) do registro atual contém o horário da última modificação.
FOLDER : lmtimes é um array associativo (um mapa de pares [key, value]). Ele é usado para armazenar a última hora da última modificação do atual directoryname para o atual END {for (... ( SUBFOLDER ). A expressão é %code% se ainda não houver um horário da última modificação armazenado para %code% ou se a hora da última modificação já armazenada for mais antiga que a atual %code% .
Quando a expressão posterior for verdadeira, o horário da última modificação e o nome de %code% serão armazenados usando a tecla %code% em lmtimes e lmtimedns , respectivamente .
%code% : Quando todos os registros foram analisados, cada %code% nome com a última hora da última modificação é impresso.
----
Para o histórico, o comando para listar os nomes dos arquivos com o tempo de modificação mais recente para cada diretório:
%pre%