【发布时间】:2022-11-11 15:37:54
【问题描述】:
我正在制作一个 Bash 脚本来排序在不同时间和日期(不是每天都有照片)进入文件夹的照片,如下所示。必须将照片移动到名为 PhotosOrder 的文件夹中,其中每天都有一个包含日期的文件夹。该任务在 Synology 服务器中执行,稍后它与 syncthing 同步到 Windows 服务器。首先我必须说我概括了它,因为我必须在许多不同的文件夹中执行它,并且我正在为每个文件夹复制脚本。这肯定是可优化的,但我们会在它工作后实现。脚本必须检查是否有 jpg 并将它们列在辅助变量 arr 中检查该列表在 if 中是否为空,如果是,则它什么也不做,但如果有 jpg,则它使:
为当天创建文件夹。 它计算了照片的数量,因为在不同的时间,不同的人放了照片,我想避免没有一张照片被覆盖。
考虑到之前的编号和我在开始时设置的名称参数,它会移动照片以重命名它们。 我不得不说我以后不能删除空文件夹,因为如果我不删除 syncthing 稍后用于同步的文件夹(我将该文件夹与另一台服务器上的文件夹同步)。到目前为止,一个替代脚本适用于我,它每天创建一个文件夹,无论是否有照片并移动它们(如果有的话),但是我必须手动删除空文件夹。如果我告诉脚本删除那些空文件夹,那么它会删除 syncthing 使用的文件夹,并且不再与其他服务器同步(此外我认为它也不是最佳的)。因此 if 循环在做任何事情之前检查是否有照片。
我现在拥有的脚本是这个:
这个:
#!/bin/sh
#values that change from each other
FOLDER="/volume1/obraxx/jpg/"
OBRA="-obraxx-"
#Create jpg listing in variable arr:
arr=$$(ls -1 /volume1/obraxx/jpg/*.jpg 2>/dev/null)
#if the variable is not empty, the if is executed:
if [[ !(-z $arr) ]]; then.
#Create the folder of the day
d="$(date +"%Y-%m-%d")"
mkdir -p "$FOLDER"/PhotosOrdered/"$d"
DESTINATION="$FOLDER/PhotosOrder/$d/"
#Count existing photos:
a=$$(ls -1 $FOLDER | wc -l)
#Move and rename the photos to the destination folder.
for image in $arr; do
NEW="$PICTURE$a"
mv -n $image $DESTINATION$(date +"%Y%m%d")$NEW.jpg
let a++
done
fi
【问题讨论】:
-
您的脚本似乎有错误,请使用shellcheck to verify syntax and best practices