1

我一直在尝试使用 Bash 在 OS X 10.8(Mountain Lion)上将创建日期从一个文件传输到另一个文件,但没有成功。这可能是和的某种组合,stattouch我还没有完全弄清楚,因为 stat 使用的格式与 touch 所需的格式不匹配。

这是我到目前为止所尝试的。它是删除创建日期的视频转换脚本的一部分:

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
4

3 回答 3

1

时间格式的转换可以通过date实用程序完成:

在 Linux (GNU coreutils) 上:

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

在 OS X 上(date选项取自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 希望将日期作为一个参数,date_transfer如果引号不存在,shell 将拆分部分 at 空格。

于 2013-10-27T16:38:53.180 回答
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
于 2013-10-28T01:17:14.873 回答
0

试试: date -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

于 2013-10-27T16:37:09.310 回答