我一直在尝试使用Bash在OS X 10.8(Mountain Lion)上将创建日期从一个文件传输到另一个文件。这可能是stat
和touch
的某种组合,但我还没有弄明白,因为stat使用的格式与触摸所需的格式不匹配。
这是我到目前为止所尝试的。它是视频转换脚本的一部分,它消除了创建日期:
for f in "$@"
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
答案 0 :(得分:1)
时间格式的转换可以通过date
实用程序:
在Linux(GNU coreutils)上:
$ date -d 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M'
201310271633
在OS X上(date
options取自Darwin在线提供的联机帮助页):
$ date -j -f '%b %d %T %Y' 'Oct 27 16:33:41 2013' '+%Y%m%d%H%M'
201310271633
您的代码应如下所示(在OS X上):
for f in "$@"
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
周围的引号。 Date希望将日期作为一个参数获取,如果引号不存在,shell会在空格中分割date_transfer
的部分内容。
答案 1 :(得分:1)
您无需对抗日期格式:使用touch -r refFile fileToBeChanged
您的代码如下:
for f in "$@"
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
答案 2 :(得分: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