Doğru yoldasınız (daha basit bir çözüm için, sadece 2 veya 3 komut çalıştırır, aşağıya bakın). Geçerli dizinden kurtulmak *
yerine kullanmalısınız¹ ./
ve bu, milisaniyelerin kesilmesini biraz kolaylaştırır, ardından sonucu GNU parallel
veya xargs
²'ye ekleyin:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
almak
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
ve örneğinizin de belirttiği gibi bundan önceki saniye ofsetini eklemek için:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
veya:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
almak:
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
Ancak bunu yapmak daha kolaydır³:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
bu size aynı istenen çıktıyı bir kez daha verir.
Kullanmanın dezavantajı *
, genişlemesi için komut satırınızla sınırlı olmanızdır, ancak avantaj, dizinlerinizi zaman damgası değerine göre sıralamanızdır. Dizin sayısı -mindepth 1
sorunluysa, ancak siparişi kaybederseniz:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
ve sort
gerekirse takın :
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Bu, örneğin örneğinde olduğu gibi yuvalanmış alt dizin olmadığını varsayar. Ayrıca kullanabilirsiniz ./ -mindepth 1
yerine*
² Sen yerini alabilir parallel
ile xargs -I{}
sadece daha ayrıntılı, @hobbs olarak burada ve @don_crissti önerdi.
³ kullanmak Gilles' Yanıta göre date
s dosya okuma yetenekleri
Fri Oct 2 05:35:28 47592
)