ファイルの行数とファイルの最後の変更日を読みたいとします(たとえば、最後の変更日が2013年1月18日の場合は出力する必要があります2013-01-18
)。次に、そのデータを次の入力ファイルに追加します。形態theFile: 4 lines, modified on 2013-01-18
。エコーを使用して出力する前に、これら2つのデータを独自の変数に保存してみました。
#!/bin/sh
totLines=$(wc -l < $1)
modDate=$(date -r $1)
echo $1: $totLines "lines, modified on" $modDate >> $1
最後の編集日を見つける方法は正しいですか?私はそうだと聞きましたが、それについての情報が見つからず、date -r
私が試しているどのスクリプトでも機能させることができないため、理由を理解できません。統計を使用することもありますが、stat -c %y $1
私が得たところでは利用できません。stat: illegal option -- c
答え1
どちらもGNUにdate -r
特化していますstat
。おそらく、Linuxユーザーは他のシステムを使用していると言うかもしれません。
残念ながら、この情報を確実に取得できる標準コマンドはありません。最も携帯性に優れたものは次のとおりです。
modDate=$(perl -MPOSIX -le '@s=stat shift or die$!;
print strftime "%Y-%m-%d", localtime $s[9]' -- "$1") || exit
zsh
独自の組み込みstat
コマンドがあります。
zmodload zsh/stat
zstat -F %F +mtime -- "$1"
(シンボリックリンクの上記の2つのコマンドは、GNUと同様にシンボリックリンクターゲットの修正時間を返します。date -r
シンボリックリンクの時間が必要な場合(GNUコマンドと同様に)stat
ソリューションstat
をに変更または追加します。)lstat
perl
-L
zstat
返品、変数の周りに二重引用符を忘れました。そして、任意のデータに使用しないでくださいecho
。