我想创建900个带有3个字母名称的文件。
示例:xyz.txt
,其中x
,y
和z
是a
到z
的不同字母。
我试图做这样的事情:
for ((i=1; i < 900; i++))
do touch {a..z}{a..z}{a..z}$i.txt
done
我预计它会停在900.
但最终我创造了超过10K的文件。有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
为了避免在句点之前使用重复字符的任何名称,如评论中所提到的,您可以这样做:
printf '%s.txt\n' {a..z}{a..z}{a..z} | grep -vE '(.).?\1.?\.' \
| head -n 900 | xargs touch
printf
语句将列表从aaa.txt
,aab.txt
打印到zzz.txt
。grep -vE '(.).?\1.?\.'
过滤了句点前三个字符不唯一的所有名称:aaa.txt
,aab.txt
,aba.txt
和baa.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扩展为所需数量的唯一名称。