该函数循环遍历destinationDirectory中的文件夹名称,以找到文件名末尾的最大数值,递增该值并将该值附加到folderNameWithoutNumber的结尾。或者我认为会。 bash的功能:tr -cd'[[:digit:]]'只提供一个数字
$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次,一切似乎都做工精细,在我得到的/路径的形式创建的前十个备份/到/备份/ folderName_1,/ path/to/backups/folderName_2,.../path/to/backups/folderName_10。当再次调用该函数时,不会创建/ path/to/backups/folderName_11。
我的第一个问题是为什么这不工作,我认为它会(创建folderName_11和计数)的方式?
我的第二个问题是我将如何格式化文件名以包括前面的零以使数字部分3位数字长(folderName_001,folderName_002)?
我的第三个也是最后一个问题,目标应该只包含同名文件夹下的同一文件夹的备份,所以组中的最后一个文件夹应该有最近的(最高)数字。如果由于某种原因文件夹不符合排序顺序,可以采取哪些措施来保证最高数量?
作为一个开始在shebang中添加'-x'来启用调试打印输出。然后你会看到为什么问题1失败 –
@Fredrik感谢您的意见。不幸的是,我的4小时bash教育留下了很多待发现。你能详细说明在哪里放置-x标志吗? –
'#!/ bin/bash -x'请参阅wikipedia以获取[shebang]的解释(http://en.wikipedia.org/wiki/Shebang_(Unix)) –