我想用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