Bir dosyanın değiştirilmiş zamanı nasıl gösterilir?


35

Bir bash betiğinde kullanım için bir dosyanın değiştirilmiş zamanını bulmak ve yazdırmak için bir yöntem istiyorum.

Ben geldim:

ls -l $filename | cut -d ' ' -f '6-8'

Hangi çıktılar:

Jul 26 15:05

Ayrıştırmaktan kaçınmak istememe rağmen ls, orada yıl geçirmek faydalı olacaktır.

İdeal olarak, datekomutun varsayılan çıktısına benzer bir çıktı görmek istiyorum .

Tue Jul 26 15:20:59 BST 2016

Başka hangi faydalı yöntemler vardır?

Yanıtlar:


46

Kullanmayın ls, bu iş için stat:

stat -c '%y' filename

-cözel çıktılar almamıza izin verir, burada %ybize dosyanın son okunaklı zamanını insan tarafından okunabilir biçimde alır. Epoch kullanımından bu yana saniyeler içerisinde zaman geçirmek için %Y:

stat -c '%Y' filename

Dosya adını da istiyorsanız, kullanın %n:

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

Biçimlendirme belirleyicilerini ihtiyacınıza göre ayarlayın. Kontrol edin man stat.

Örnek:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

Çıktı gibi istiyorsanız, Tue Jul 26 15:20:59 BST 2016Epoch süresini girdi olarak kullanın date:

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

dateİhtiyaçlarınızı karşılamak için format belirticilerini kontrol edin . Bkz man datede.


5
Bu cevabın lsötesinde, sistemler arasında tutarsızca uygulanan ve hiçbir zaman herhangi bir otomasyon için kullanılmaması gerektiğine dikkat edin . Bunun yerine, komut dosyaları yazarken statve gibi komutları kullanın find.
Paddy Landau

1
mükemmel. Bu küçük hazineyi bilmiyordum. Bunların çoğu * nix / linux ortamında henüz keşfedilmemiş.
Ken Ingram,

1

denedim

ls -l $filename | cut -d ' ' -f '6-8'

ancak eğer tarih 10'dan az ise saati özlüyor. Bu, 10'dan küçükse, tarihten önceki fazladan boşluk nedeniyle. Bunu deneyin:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

Awk komutu, tüm boşluklarla ayrılmış alanları yazdırır (-F ''). Umarım çalışır. Bunun asıl soruya cevap vermediğini biliyorum, ancak tarih ve zaman için sadece ls komutuyla ilgili bir açıklama. Google "ubuntu dosyasının tarihini ve saatini aldığınızda", bu soruyu en üstte listeliyor, bu da aradığım şeydi, ayrıca yıla ihtiyacım yok. Yıl, tarih ve saat için aşağıdaki komutlardan birini deneyebilirsiniz. % m ay sayısını yazdırır. % b ayın kısaltmasını yazdırır: Saat ve dakikaya ihtiyacınız yoksa% H:% M değerini bırakın. % -d, ayın başındaki sıfır sırasını yazmaz.

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
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.