2013-10-27 49 views
1

我一直在努力沒有成功創建日期從一個文件傳送到另一個OS X 10.8(山獅)使用bash。這可能是stattouch的一些組合,但我還沒有弄明白,因爲stat使用的格式與觸摸所需的格式不匹配。轉移創建日期從一個文件到另一個

這是我到目前爲止所嘗試的。這是其抹殺創建日期的視頻轉換腳本的一部分:

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename $f .AVI).mp4" -e x264 -q 20 -B 160 

    # read out creation date from source file 
    date_transfer=$(stat -f "%Sm" "$f")  # output e.g.: Oct 27 16:33:41 2013 

    # write creation date of source to converted file 
    touch -t $date_transfer /Users/J/Desktop/$(basename $f .AVI).mp4 # requires 201310271633 instead 
done 

回答

1

時間格式的轉換可以通過date實用程序完成:

在Linux(GNU的coreutils):

$ date -d 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M' 
201310271633 

在OS X(從Darwin聯機手冊可在網上​​採取date options):

$ date -j -f '%b %d %T %Y' 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M' 
201310271633 

您的代碼應該是這樣的(在OS X):

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename "$f" .AVI).mp4" -e x264 -q 20 -B 160 

    # read out creation date from source file 
    date_transfer=$(stat -f '%Sm' "$f") 

    # write creation date of source to converted file 
    touch -t $(date -j -f '%b %d %T %Y' "$date_transfer" '+%Y%m%d%H%M') /Users/J/Desktop/$(basename "$f" .AVI).mp4 
done 

請注意報價大約$date_transfer。日期想要將日期作爲一個參數,如果引號不存在,shell會將空間分割爲date_transfer

0

嘗試:日期-d $date_transfer +%Y%M%d%H%M

formatted_date=$(date -d$date_transfer +%Y%m%d%H%M)

touch -t $formatted_date /Users/J/Desktop/$(basename $f .AVI).mp4

+0

這將不會在OS X上工作,由於'date'實用程序選項differencies。我已經提供了更完整的答案。 – Palec

1

你並不需要打日期格式:使用touch -r refFile fileToBeChanged

你的代碼是這樣:

for f in "[email protected]" 
do 
    # convert video 
    HandBrakeCLI -i "$f" -o "/Users/J/Desktop/$(basename $f .AVI).mp4" -e x264 -q 20 -B 160 

    # transfer creation date of source to converted file 
    touch -r "$f" /Users/J/Desktop/$(basename $f .AVI).mp4 
done 
+0

嗨格倫,斑點。這使得腳本更簡單,並避免了日期轉換的混亂。謝謝。 – Jax

相關問題