我相信有一些类似的帖子,如果我在这方面做得更好,我可以找到我自己问题的答案(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命令集文件需要用引号包装日期字符串。这就是困扰我的原因,因为当我从终端运行sh changedate.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
...我想我需要用反斜杠来让变量与引号一起打印,但我不太清楚。谢谢你的帮助!
发布于 2019-12-24 20:29:26
变量只在双引号中展开,而不是单引号。因此,您需要在echo的参数周围加上双引号。
echo "setfile -d '$datenew' '$id'"https://stackoverflow.com/questions/59472904
复制相似问题