我想用3个字母的名字创建900个文件。如何停止以特定数字创建文件?
示例: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。有人可以帮我完成这个吗?
我想用3个字母的名字创建900个文件。如何停止以特定数字创建文件?
示例: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。有人可以帮我完成这个吗?
为了避免与前一段重复的字符,如在评论中提到任何人的名字,你可以这样做:
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
都被过滤。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
'printf'%s \ n'{a..i} {j..q} {r..z} {r..z} {j..q} {a..d}'给我936个字符串这些都明显符合要求。 – tripleee
@tripleee你应该把它作为答案,它非常优雅。 –
你可以用2线做到这一点:
all=({a..z}{a..z}{a..z}.txt)
touch "${all[@]:0:900}"
(假设你的操作系统允许与900个参数的命令行)。如果除了前900个这样的文件以外,你需要做更复杂的事情。
的文件名提醒split
默认输出命名。所以你可以将一个空文件分割成900个文件。
split /dev/null -n900 -a3 --additional-suffix=".txt" ""
下产生910名,并将它们传递给touch
之前丢弃过去的10。
printf '%s.txt\n' {a..m}{p..v}{0..9} | head -n 900 | xargs touch
你也许能够找到产生正是900的替代品,所以你可以只touch <pattern>
和有壳扩大到所需数量的唯一名称的组合。
没有任何数字在名称中出现两次的所有数字将生成738个唯一名称,但包含一些单位和双位数字。如果您需要三位数字,则有648个组合。 – tripleee
你希望这种语法('{a..z} {a..z} {a..z} $ i.txt')能做什么? –
我期望它创建XXX.txt文件并停在900. – gumluvinisgoodluvin
26 * 26 * 26是17,576;你实际上想创造哪些人的5%? – chepner