shell 用于创建多个文件的脚本,在下次执行时从最后一个文件递增

shell script to create multiple files, incrementing from last file upon next execution

我正在尝试创建一个 shell 脚本,它将创建指定数量的多个文件(或一批文件)。当达到数量时,脚本停止。重新执行脚本时,文件将从上次创建的文件中拾取。因此,如果脚本首先创建文件 1-10 运行,那么在下一个脚本执行时应该创建 11-20,依此类推。

enter code here
#!/bin/bash
NAME=XXXX
valid=true
NUMBER=1
while [ $NUMBER -le 5 ];
do
   touch $NAME$NUMBER
   ((NUMBER++))
   echo $NUMBER + "batch created"
   if [ $NUMBER == 5 ];
   then
     break
   fi
   touch $NAME$NUMBER
   ((NUMBER+5))
   echo "batch complete"
done

根据我上面的评论和您的描述,您可以编写一个脚本,每次 运行 时都会创建 10 个编号的文件(默认情况下),从下一个可用编号开始。如前所述,与其只使用未填充的原始数字,一般排序和列表最好使用零填充数字,例如001002、...

如果你只使用 1, 2, ... 那么当你达到 10 的每个次方时,你最终会得到奇数排序。考虑编号为 1...12 的前 12 个文件没有填充。一般列表排序会产生:

file1
file11
file12
file2
file3
file4
...

其中 1112 排在 2 之前。使用 printf -v 添加前导零可避免此问题。

考虑到这一点,允许用户通过将其作为参数更改前缀(文件名的第一部分),并通过将计数作为第二个参数传递来更改要创建的新文件的数量争论,你可以这样做:

 #!/bin/bash

prefix="${1:-file_}"                ## beginning of filename
number=1                            ## start number to look for
ext="txt"                           ## file extension to add

newcount="${2:-10}"                 ## count of new files to create

printf -v num "%03d" "$number"      ## create 3-digit start number
fname="$prefix$num.$ext"            ## form first filename

while [ -e "$fname" ]; do           ## while filename exists
  number=$((number + 1))            ## increment number
  printf -v num "%03d" "$number"    ## form 3-digit number
  fname="$prefix$num.$ext"          ## form filename
done

while ((newcount--)); do            ## loop newcount times
  touch "$fname"                    ## create filename
  ((! newcount)) && break;          ## newcount 0, break (optional)
  number=$((number + 1))            ## increment number
  printf -v num "%03d" "$number"    ## form 3-digit number
  fname="$prefix$num.$ext"          ## form filename
done

运行不带参数的脚本将创建前 10 个文件,file_001.txt - file_010.txt。 运行 第二次,它会再创建 10 个文件 file_011.txtfile_020.txt

要创建一个包含 5 个前缀为 list_ 的新文件组,您可以这样做:

bash scriptname list_ 5

这将导致 5 个文件 list_001.txtlist_005.txt。 运行再次使用相同的选项将创建 list_006.txtlist_010.txt

由于上面的 3 位方案被限制为最大 1000 个文件(如果你包括 000),没有必要从最后一个写入的文件中获取数字( bash 可以数到 1000 相当快)。但是,如果您对 1000 万个文件使用 7 位数字,那么您可能希望使用 ls -1 | tail -n 1 解析最后一个数字(或版本排序并选择最后一个文件)。像下面这样的东西会做:

  number=$(ls -1 "$prefix"* | tail -n 1 | grep -o '[1-9][0-9]*')

(注意:ls -(one) 而不是 ls -(ell))

如果这就是您要找的,请告诉我。