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 parallelveya 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 1sorunluysa, ancak siparişi kaybederseniz:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
ve sortgerekirse 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 1yerine*
² Sen yerini alabilir parallelile xargs -I{}sadece daha ayrıntılı, @hobbs olarak burada ve @don_crissti önerdi.
³ kullanmak Gilles' Yanıta göre dates dosya okuma yetenekleri
Fri Oct 2 05:35:28 47592)