2017-12-02 3 views
0

3文字の名前で900ファイルを作成したいと思います。特定の番号のファイルの作成を停止するにはどうすればよいですか?

例:xyz.txtxy、及びzaからzに異なる文字です。

私はこのような何かやろうとしている

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文はzzz.txtaaa.txtaab.txtからリストを出力します。
  • grep -vE '(.).?\1.?\.'は、期間前の3文字が一意ではない任意の名前をフィルタリングします。aaa.txtaab.txtaba.txtおよびbaa.txtはすべてフィルタリングされます。
  • 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

'printf '%s \ n' {a..i} {j..q} {r..z} {r..z} {j..q} {a..d}'私に936の文字列を与えるすべてが明らかに要件を満たしています。 – tripleee

+0

@トリプルリーあなたは答えとしてそれを置くべきです、それは非常にエレガントです。 –

0

あなたは2行でこれを行うことができます(お使いのOSが900個の引数を持つコマンドラインを可能と仮定)

all=({a..z}{a..z}{a..z}.txt) 
touch "${all[@]:0: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 

あなたは、あなただけのtouch <pattern>とシェルがユニークな名前の必要な数にそれを展開することもできますので、正確に900の選択肢を生成の組み合わせを見つけることができるかもしれません。

+0

名前に2桁の数字がない数字はすべて、738の固有名詞を生成しますが、これには一桁と二桁の数字が含まれます。 3桁の数字が必要な場合は、648個の組み合わせがあります。 – tripleee

関連する問題