我相信也有一些类似的帖子,如果我对此做得更好,我可以找出我自己的问题(This one和this one)的答案。
我有一台Mac,并且正在使用来自终端的 setfile 命令,该命令在单个文件上效果很好。
setfile -d "08/02/2001 00:00:00" X-09-04.m4v
但是,我有数百个视频可以做到这一点。我有一个 changedate.csv 文件,其中所有日期和关联的文件名均位于两个单独的列中(屏幕截图)。 CSV的格式如下:
datenew,id
12/19/1998 12:00:00 AM,X-01/X-01-01.m4v
12/31/1998 12:00:00 AM,X-01/X-01-02.m4v
12/31/1998 12:00:00 AM,X-01/X-01-03.m4v
然后,我创建了如下所示的 changedate.sh 脚本:
#!/bin/bash
cat changedate.csv | while IFS=, read datenew id;
do
echo 'setfile -d "$datenew" $id'
done
命令setfile要求日期字符串需要用引号引起来。这就是让我感到困惑的原因,因为当我从终端运行 shchangedate.sh 脚本时,它的打印结果如下:
setfile -d "$datenew" $id
setfile -d "$datenew" $id
setfile -d "$datenew" $id
....
如果我删除变量周围的引号,它将正确读取csv,输出如下所示:
setfile -d 12/19/1998 00:00:00 X-01/X-01-01.m4v
setfile -d 12/31/1998 00:00:00 X-01/X-01-02.m4v
setfile -d 12/31/1998 00:00:00 X-01/X-01-03.m4v
...
这几乎是正确的,但是它不起作用,因为日期字符串没有用引号引起来。最终输出应如下所示:
setfile -d "12/19/1998 00:00:00" X-01/X-01-01.m4v
setfile -d "12/31/1998 00:00:00" X-01/X-01-02.m4v
setfile -d "12/31/1998 00:00:00" X-01/X-01-03.m4v
...
我认为我需要使用反斜杠来使变量与引号一起显示,但是我不太清楚。感谢您的帮助!
答案 0 :(得分:0)
变量仅在双引号内而不是单引号内扩展。因此,您需要在echo
的参数周围加上双引号。
echo "setfile -d '$datenew' '$id'"