2017-12-02 149 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

相關問題