如何停止以特定数字创建文件?

时间:2017-12-02 18:47:14

标签: linux bash centos

我想创建900个带有3个字母名称的文件。

示例:xyz.txt,其中xyzaz的不同字母。

我试图做这样的事情:

for ((i=1; i < 900; i++))
      do touch {a..z}{a..z}{a..z}$i.txt
done

我预计它会停在900.

但最终我创造了超过10K的文件。有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

为了避免在句点之前使用重复字符的任何名称,如评论中所提到的,您可以这样做:

printf '%s.txt\n' {a..z}{a..z}{a..z} | grep -vE '(.).?\1.?\.' \
    | head -n 900 | xargs touch
  • printf语句将列表从aaa.txtaab.txt打印到zzz.txt
  • grep -vE '(.).?\1.?\.'过滤了句点前三个字符不唯一的所有名称:aaa.txtaab.txtaba.txtbaa.txt都已过滤。< / LI>
  • head -n 900获取列表中的前900个名称
  • xargs touch尽可能少地调用touch,但会确保命令行永远不会太长。

如果你想随机化文件名(但仍然符合这些标准),你可以在选择900之前随机播放它们:

printf '%s.txt\n' {a..z}{a..z}{a..z} | grep -vE '(.).?\1.?\.' \
    | shuf | head -n 900 | xargs touch

答案 1 :(得分:0)

您可以使用2行执行此操作:

all=( {a..z}{a..z}{a..z}.txt )
touch "${all[@]:0:900}"

(假设您的操作系统允许带有900个参数的命令行)。如果除了前900个这样的文件之外,你还需要做一些更复杂的事情。

答案 2 :(得分:0)

文件名提醒split默认输出命名。因此,您可以将空文件拆分为900个文件。

In [143]: df
Out[143]: 
   val       ms       
0   11  6938987
1   22  6938997
2   33  6938998

答案 3 :(得分:0)

以下内容生成910个名称,并在将它们传递给touch之前丢弃最后10个名称。

printf '%s.txt\n' {a..m}{p..v}{0..9} | head -n 900 | xargs touch

您或许可以找到一个产生900个替代品的组合,这样您就可以touch <pattern>并将shell扩展为所需数量的唯一名称。