2017-12-02 210 views
0

我想用3个字母的名字创建900个文件。如何停止以特定数字创建文件?

示例:xyz.txt,其中xy,和z是不同的字母从az

我试图做这样的事情:

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

我希望它停止在900

但最后我创建的文件超过10K。有人可以帮我完成这个吗?

+0

你希望这种语法('{a..z} {a..z} {a..z} $ i.txt')能做什么? –

+0

我期望它创建XXX.txt文件并停在900. – gumluvinisgoodluvin

+0

26 * 26 * 26是17,576;你实际上想创造哪些人的5%? – chepner

回答

2

为了避免与前一段重复的字符,如在评论中提到任何人的名字,你可以这样做:

printf '%s.txt\n' {a..z}{a..z}{a..z} | grep -vE '(.).?\1.?\.' \ 
    | head -n 900 | xargs touch 
  • printf语句打印从aaa.txt列表,aab.txtzzz.txt
  • grep -vE '(.).?\1.?\.'筛选期间之前的三个字符不是唯一的任何名称:aaa.txtaab.txtaba.txtbaa.txt都被过滤。
  • head -n 900从列表touch的几次获得的第900名
  • xargs touch调用尽可能但将确保在命令行中从未太长。

如果你想随机的文件名(但仍坚持这些标准),则可以选择900之前洗牌他们:

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

'printf'%s \ n'{a..i} {j..q} {r..z} {r..z} {j..q} {a..d}'给我936个字符串这些都明显符合要求。 – tripleee

+0

@tripleee你应该把它作为答案,它非常优雅。 –

0

你可以用2线做到这一点:

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

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

0

的文件名提醒split默认输出命名。所以你可以将一个空文件分割成900个文件。

split /dev/null -n900 -a3 --additional-suffix=".txt" "" 
0

下产生910名,并将它们传递给touch之前丢弃过去的10。

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

你也许能够找到产生正是900的替代品,所以你可以只touch <pattern>和有壳扩大到所需数量的唯一名称的组合。

+0

没有任何数字在名称中出现两次的所有数字将生成738个唯一名称,但包含一些单位和双位数字。如果您需要三位数字,则有648个组合。 – tripleee

相关问题