2009-11-30 74 views
13

我想測試一個文件在if語句中用bash創建的時間(以秒爲單位)。我需要創建日期,而不是修改。用bash測試文件日期

你有什麼想法如何做到這一點,而不使用find這樣的命令與grep

+0

有一個數字,你可以用它來做到這一點和bash可以調用所有這些命令。爲什麼厭惡使用外部命令? UNIX是建立在工具的哲學基礎之上的,它可以很好地完成一件事和一件事。 – paxdiablo

+0

會持續修改時間嗎 - 或者您需要創建時間嗎? – Joel

+0

我更喜歡創作時間 – JeffPHP

回答

7

這裏是最好的答案,我發現當時的存在,但它僅用於修改時間:

expr `date +%s` - `stat -c %Y /home/user/my_file` 
+0

使用%Z代替%Y您獲得最後更改日期(創建日期與我的計算機上一樣) –

18

我怕我上無法解答的創建時間的問題,但對於最後修改時間,你可以使用以下方法來獲得劃時代日期,在,因爲最後修訂

date --utc --reference=filename +%s 

,所以你可以再等等類似:

modsecs=$(date --utc --reference=filename +%s) 
nowsecs=$(date +%s) 
delta=$(($nowsecs-$modsecs)) 
echo "File $filename was modified $delta secs ago" 

if [ $delta -lt 120 ]; then 
    # do something 
fi 

等。

更新 這樣做的更elgant方式(同樣,只修改的時間):how do I check in bash whether a file was created more than x time ago?

1

你可以用ls --full與時間

file1="file1" 
file2="file2" 
declare -a array 
i=0 
ls -go --full-time "$file1" "$file2" | { while read -r a b c d time f 
do  
    time=${time%.*} 
    IFS=":" 
    set -- $time 
    hr=$1;min=$2;sec=$3 
    hr=$((hr * 3600)) 
    min=$((min * 60)) 
    totalsecs=$((hr+min+sec)) 
    array[$i]=$totalsecs 
    i=$((i+1)) 
    unset IFS  
done 
echo $((${array[0]}-${array[1]})) 
} 
2

如果你的系統有stat

modsecs=$(stat --format '%Y' filename) 

而且你可以算一算,如Joel的回答。