Vous êtes sur la bonne voie (pour une solution plus simple, n'exécutant que 2 ou 3 commandes, voir ci-dessous). Vous devriez utiliser *
au lieu de ./
pour vous débarrasser du répertoire courant¹ et cela simplifie quelque peu la coupe des millisecondes, puis il suffit de diriger le résultat en GNU parallel
ou xargs
²:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
obtenir
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
et pour ajouter le décalage des secondes avant cela comme l'indique votre exemple:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
ou:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
obtenir:
1442039711 Sat 12 Sep 2015 08:35:11 CEST
1442134211 Sun 13 Sep 2015 10:50:11 CEST
1442212521 Mon 14 Sep 2015 08:35:21 CEST
Cependant, c'est plus simple à faire³:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
ce qui vous donne à nouveau la même sortie demandée.
L'inconvénient de l'utilisation *
est que vous êtes limité par votre ligne de commande pour son expansion, l'avantage est cependant que vous obtenez vos répertoires triés par valeur d'horodatage. Si le nombre de répertoires pose problème -mindepth 1
, mais perdez l'ordre:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
et insérer sort
si besoin:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Cela suppose qu'il n'y a pas de sous-répertoires imbriqués, comme cela semble être le cas dans votre exemple. Vous pouvez également utiliser ./ -mindepth 1
au lieu de*
² Vous pouvez remplacer parallel
par xargs -I{}
ici comme @hobbs et @don_crissti l'ont suggéré, c'est juste plus verbeux.
³ basé sur la réponse de Gilles pour utiliser date
les capacités de lecture de fichiers de s
Fri Oct 2 05:35:28 47592
)