将创建日期从一个文件传输到另一个文件

时间:2013-10-27 16:26:09

标签: bash touch osx-mountain-lion stat filemtime

我一直在尝试使用Bash在OS X 10.8(Mountain Lion)上将创建日期从一个文件传输到另一个文件。这可能是stattouch的某种组合,但我还没有弄明白,因为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

3 个答案:

答案 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