我需要自动化一个备份解决方案,该解决方案将文件存储在YYYYMMDD.nn等文件夹中。 每天都会像这样备份少量文件,因此生成的文件夹名称可能是20141002.01,20141002.2 ... 20141002.10。我当前的脚本适用于YYYYMMDD.n但是当n超过9次排序并且拾取最后一个文件夹时没有工作因为20141002.10高于20141002.9母鸡切换到YYYYMMDD.nn格式并且分离nn的方法,剥离引导零,然后递增,并在需要时添加前导零。 我有一个功能,它检查今天的最后一个文件夹的日期并创建下一个文件夹。
createNextProcessedFolder() {
local LastFolderName=`ls -1 ${ProcessedListsDir} | grep ${CurrentDate} | tail -n 1`
n=`echo ${LastFolderName} | sed -r 's/^.{9}//'`
n="$((10#$n))"
nextFolderName=${CurrentDate}.$((if[[ $(( ${n}+1 )) < 10 ]];then n="0$((${n}+1))";else n="$(( ${n}+1 ))"; fi))
mkdir ${ProcessedListsDir}/${nextFolderName}
if [[ -d ${ProcessedListsDir}/${nextFolderName} ]]
then
echo "New folder ${nextFolderName} was created"
else
echo "Error: ${nextFolderName} was not created"
fi
Location="${ProcessedListsDir}/${nextFolderName}"
}
因此,当我尝试运行此操作时,我收到如下错误:
line 21: if[[ 1 < 10 ]];then n="01";else n="1"; fi: syntax error: invalid arithmetic operator (error token is ";then n="01";else n="1"; fi")
第21行是:
nextFolderName=${CurrentDate}.$((if[[ $(( ${n}+1 )) < 10 ]];then n="0$((${n}+1))";else n="$(( ${n}+1 ))"; fi))
我确定在此之后会有更多错误,但如果有人帮助我,我真的很感激。
答案 0 :(得分:1)
$((...))
进行命令替换,因为它需要$(...)
[[
和]]
之前和之后需要空格。您也可以在BASH中使用((...))
:试试这个:
(( (n+1) < 10 )) && n="0$((n++))" || ((n++))
nextFolderName="${CurrentDate}.${n}"
答案 1 :(得分:1)
为完整起见,另一种解决方案是:
n=$( printf "%02d" $n )
02
之前的d
表示前缀为0
最多2位数。或者:
nextFolderName="${CurrentDate}."$( printf "%02d" "$n" )
答案 2 :(得分:0)
所以我的问题是增加一个数字女巫从一个带有前导零的字符串中提取,然后如果小于10则返回带有前导零的递增数字。我最终使用的解决方案可以用下面的脚本表示。 我想它不能短于
n=$1
(( ((n++)) < 10 )) && n="0$n"
echo $n
我没想到的是我不必使用这个从n中删除前导零,n ++在递增时执行:-) 再次感谢anubhava让我指向正确的方向。