Tarih ve saati bir dosya adına nasıl yazarsınız?


23

Bir komutu çalıştırmaya çalışıyorum ve tarih ve saati çıktı dosya adına koymak istiyorum.

İşte çalıştırmak istediğim örnek bir komut.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Tarih saat formatı alt çizgi ile mantıklı olabilir. AM ve PM kullanılamıyorsa UTC bile.


Bash değilse, hangi kabuğu kullanıyorsunuz?
Ryan,

Oh bash ... Bash betiğini kastediyordum *
visc

Borular değilsin, yönlendiriyorsun. Yönlendirme olmasaydın ve soru aynı olurdu. Başlık güncelleniyor.
Mikel

Yanıtlar:


46

Eğer bir dosya adı olarak geçerli datetime kullanmak istiyorsanız, kullanabileceğiniz dateve komut ikamesi .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Bu, dosyada 2016_04_25_10_30_AM.log(geçerli tarih saatiyle birlikte) /etc/mtabiçeriği olarak md5 karmasıyla oluşturulmasına neden olur .

Lütfen, 12 saatlik formatta zaman damgaları içeren dosya adlarının, sıralamalarını istediğiniz şekilde ada göre sıralamayacağını unutmayın. Bunun yerine 24 saatlik format zaman damgalarını kullanarak bu sorunu önleyebilirsiniz.

Bu belirli tarih biçimini kullanma gereksiniminiz yoksa, ISO 8601 uyumlu bir tarih saat biçimi kullanmayı düşünebilirsiniz. Geçerli ISO 8601 tarih / saat gösterimlerinin nasıl üretileceğine ilişkin bazı örnekler:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Eğer "daha güvenli" dosya isimleri (örneğin, Windows ile uyumluluk için) istiyorsanız, kolonları zaman bölümünden çıkartabilirsiniz.

Lütfen yukarıdaki örneklerin hepsinin yerel sistem zamanını aldığını unutmayın. Zaman dilimleri arasında tutarlı bir zaman temsiline ihtiyacınız varsa, bir zaman dilimi uzaklığı veya UTC belirtmelisiniz. Aramanızın format bölümündeki "% z" yi kullanarak ISO 8601 uyumlu bir saat dilimi uzaklığı elde edebilirsiniz date:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Bayrağı datebelirleyerek -uve saatin UTC olduğunu belirtmek için datetime dizesinin sonuna "Z" ekleyerek çağrınızda UTC saati alabilirsiniz :

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@Mikel Siz ve ben çapraz düzenleme yaptık mı?
Ryan,

Muhtemelen. Az önce "subshell" i "komut değiştirme" olarak değiştirdim. Şimdi bittim, lütfen istediğiniz gibi düzenleyin.
Mikel

@Mikel Sorun yok. Şimdi düzenlememi yeniden gönderdim.
Ryan,

@Mikel Endişelenme! Her halükarda "komut değiştirme" olarak adlandırdığımı hatırlamalıydım. Cevabı geliştirdiğiniz için teşekkürler!
Ryan,

3
Alt çizgi garip bir karakterdir. ISO-8601 benzeri kullanılması tercih edilir$(date +%FT%T) hangi verecektir 2016-04-25T10:30:00.
hschou
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.