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%