每天自动替换名称中带有日期的文件

每天自动替换名称中带有日期的文件

我正在尝试获取一个脚本,将今天创建的所有文件移动到以今天的日期命名的文件夹中。

我有一些 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"/

相关内容