此函数遍历destinationDirectory 中的文件夹名称,以查找文件名末尾的最高数值,增加该值,并将该值附加到folderNameWithoutNumber 的末尾。或者我认为会的。bash函数:
$backupFolderNumber=0
$1=$sourceDirectory
$2=$destinationDirectory
$3=$folderNameWithoutNumber
# The values when the function are called
backupDirectory() {
for currentFolder in $2/*
do
backupFolderNumber=$(echo $currentFolder | tr -cd '[[:digit:]]')
done
let backupFolderNumber+=1
cp -r $1 $2/$3$backupFolderNumber
echo "Backup complete."
}
当此函数被调用前 10 次时,一切似乎都运行良好,因为我以 /path/to/backups/folderName_1、/path/to/backups/folderName_2、... 的形式创建了前十个备份/path/to/backups/folderName_10. 再次调用该函数时,不会创建 /path/to/backups/folderName_11。
我的第一个问题是为什么这不像我想象的那样工作(创建 folderName_11 并计数)?
我的第二个问题是如何格式化文件名以包含前面的零以使数字部分长 3 位(文件夹名称_001,文件夹名称_002)?
我的第三个也是最后一个问题,目标应该只包含同名文件夹的备份,因此组中的最后一个文件夹应该具有最新(最高)的编号。如果由于某种原因文件夹没有排序,可以做些什么来保证找到最高数字?