Bashスクリプト内で使用するために、ファイルの変更された時間を見つけて出力する方法が欲しいのです。
私は思いついた:
ls -l $filename | cut -d ' ' -f '6-8'
どの出力:
Jul 26 15:05
ls
の解析を回避したいのですが、年をそこに入れると便利です。
理想的には、date
コマンドのデフォルト出力に似た出力を見たいです。
Tue Jul 26 15:20:59 BST 2016
他にどのような便利な方法が利用できますか?
ls
は使用しないでください。これはstat
の仕事です:
stat -c '%y' filename
-c
を使用すると、特定の出力を取得できます。ここでは%y
を使用すると、人間が読み取れる形式のファイルの最終変更時刻を取得できます。エポック以降の時間を秒単位で取得するには、%Y
を使用します。
stat -c '%Y' filename
ファイル名も必要な場合は、%n
を使用します。
stat -c '%y : %n' filename
stat -c '%Y : %n' filename
必要に応じてフォーマット指定子を設定します。 man stat
を確認してください。
例:
% 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
Tue Jul 26 15:20:59 BST 2016
のような出力が必要な場合は、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
のフォーマット指定子をチェックして、必要に応じてください。 man date
もご覧ください。
私は試した
ls -l $filename | cut -d ' ' -f '6-8'
ただし、日付が10未満の場合、時刻が欠落します。これは、10未満の場合、日付の前に余分なスペースがあるためです。これを試してください。
filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'
Awkコマンドは、すべてのスペース(-F '')で区切られたフィールドを出力します。それがうまくいくことを願っています。私はこれが元の質問に答えていないことを知っていますが、日付と時刻についてのlsコマンドの説明だけです。 「ubuntu get date and time of file」をGoogleで検索すると、この質問が一番上に表示されます。これは私が探していたものです。年も必要ないからです。年、日付、および時刻については、以下のコマンドのいずれかを試すことができます。 %mは月番号を出力します。 %bは月の省略形を出力します:時間と分が必要ない場合は、%H:%Mを削除します。 %-dは、月の最初のゼロを出力しません。
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"
date -r <filename>
はうまく機能します。標準のdate
フォーマット文字列は機能しますが、デフォルトはdate
が通常出力するものとまったく同じであり、これは望みどおりです。