![每天自动替换名称中带有日期的文件](https://linux22.com/image/904321/%E6%AF%8F%E5%A4%A9%E8%87%AA%E5%8A%A8%E6%9B%BF%E6%8D%A2%E5%90%8D%E7%A7%B0%E4%B8%AD%E5%B8%A6%E6%9C%89%E6%97%A5%E6%9C%9F%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在尝试获取一个脚本,将今天创建的所有文件移动到以今天的日期命名的文件夹中。
我有一些 IP 摄像机正在将图像发送到一个文件夹。
图像的名称是:
2018-09-11_12-44-19_Inside.jpg
2018-09-11_12-26-28_Outside1.jpg
2018-09-11_12-21-48_Inside.jpg
2018-09-11_12-15-58_Outside2.jpg
…
我想设置一个 cron 作业,每天 23 点 59 分运行一个脚本,将今天的所有文件移动到今天的文件夹中。
我的脚本被卡住了,正在寻求帮助。
today=$(date -I)
todayFolder=$(mkdir /share/CameraCaptures/Trial/$today)
actualFolder=/share/CameraCaptures/Trial/$today
chmod 777 $actualFolder
datedTodayfiles=$actualFolder/$today"_*"
order=$(mv $datedTodayfiles $actualFolder)
我收到此错误:
mv: unable to rename `/share/CameraCaptures/Trial/2018-09-11/2018-09-11_*': No such file or directory
答案1
您(可以理解,因为这很奇怪)稍微误解了 bash 的引用语法。通常,您需要在“$variables”两边加上双引号(这样空格就不会破坏脚本)——但是如果您在通配符*两边加上引号,它只会按字面意思理解它们。它们必须取消引用才能工作。这就是为什么mv
要求 移动*
名称中实际上包含 的文件的原因。(通常,当您使用 时*
,bash 会将其替换为文件列表,然后再将其传递给mv
。)
不幸的是,尝试将文件列表收集到变量中会产生更多的怪癖,所以我建议这次不要使用一个$datedTodayfiles
。
最简单的方法就是直接去order=$(mv "$actualFolder/$today"_* $todayFolder)
。
还:
要小心,因为
$todayFolder
可能没有设置任何东西,而且$actualFolder
似乎是错误的东西。你可能并不想
chmod 777
答案2
today=$(date -I)
todayFolder=$(mkdir /share/CameraCaptures/Trial/$today)
actualFolder=/share/CameraCaptures/Trial/
chmod 777 $actualFolder$today
sleep 1
mv "$actualFolder$today"_* "$actualFolder$today"/