183

ファイルの日付を出力する方法が見つからないようです。これまでのところ、ディレクトリ内のすべてのファイルを印刷できますが、日付を印刷する必要があります。

エントリのエコーに日付形式を添付する必要があることはわかっていますが、正しい形式が見つかりません。

echo "Please type in the directory you want all the files to be listed"

read directory 

for entry in "$directory"/*
do
  echo "$entry"
done
4

10 に答える 10

289

「date」コマンドの方がはるかに簡単ではありませんか? awk、stat などは必要ありません。

date -r <filename>

また、日付のフォーマットについてはman ページを参照してください。たとえば、一般的な日付と時刻の形式の場合:

date -r <filename> "+%m-%d-%Y %H:%M:%S"
于 2013-12-27T20:25:34.793 に答える
161

stat コマンドを使用できます

stat -c %y "$entry"

より詳しい情報

%y 最終変更時刻、人間が読める形式
于 2013-05-06T02:30:11.517 に答える
16

YYYY-MM-DD HH:MMOS X では、ファイルの出力で日付を の形式にするのが好きです。

したがって、使用するファイルを指定するには:

stat -f "%Sm" -t "%Y-%m-%d %H:%M" [filename]

ある範囲のファイルで実行したい場合は、次のようにすることができます。

#!/usr/bin/env bash
for i in /var/log/*.out; do
  stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
done

sudo periodic daily weekly monthlyこの例では、ログ ファイルを参照しているため、コマンドを最後に実行したときに出力されます。


各日付の下にファイル名を追加するには、代わりに次を実行します。

#!/usr/bin/env bash
for i in /var/log/*.out; do
  stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
  echo "$i"
done

出力は次のようになります。

2016-40-01 16:40
/var/log/daily.out
2016-40-01 16:40
/var/log/monthly.out
2016-40-01 16:40
/var/log/weekly.out

残念ながら、改行を防ぎ、スクリプトに行を追加せずにファイル名を日付の末尾に追加する方法がわかりません。


PS - 私は#!/usr/bin/env bash毎日 Python ユーザーとして使用してbashおり、代わりにシステムに異なるバージョンがインストールされています。#!/bin/bash

于 2016-05-01T07:21:54.400 に答える
6

@StevePenny の回答に追加すると、人間が読めない部分をカットしたい場合があります。

stat -c%y Localizable.strings | cut -d'.' -f1
于 2013-05-06T02:33:39.193 に答える
3

改行については、コードを編集して改行のないものを取得しました。

#!/bin/bash
for i in /Users/anthonykiggundu/Sites/rku-it/*; do
   t=$(stat -f "%Sm"  -t "%Y-%m-%d %H:%M" "$i")
   echo $t : "${i##*/}"  # t only contains date last modified, then only filename 'grokked'- else $i alone is abs. path           
done
于 2016-05-13T08:35:32.050 に答える