50個のファイルを含む50個のディレクトリを作成します。

50個のファイルを含む50個のディレクトリを作成します。

50のディレクトリ(dir-01..dir-50)を作成しようとしています。 50個のディレクトリのそれぞれに50個のファイル(01.txt..50.txt)を作成したいと思います。

For example:
    dir-01/01.txt..50.txt
    dir-02/02.txt..50.txt
    etc...

ディレクトリを作成できますが、各ディレクトリ内にファイルを作成する際に問題があります。また、これらすべてをtarファイルに圧縮してみました。

私が現在いるところは次のとおりです。

for i in {1..50};
   do mkdir dir-$i;
done;
for j in {1..50};
   do touch $j.txt.dir-*;
done;
tar -cf final.tar dir-{1..50}

2番目のループが間違っていることを知っていますが、進行方法がわかりません。どんな提案にも感謝します。

これはうまくいくようですが、正しい構文や形式があるかどうかはわかりません。

for i in {1..50}; do
  mkdir "dir-$i";
  for j in {1..50}; do
      touch "./dir-$i/$j.txt";
    done;
done;

tar -cf final.tar dir-{1..50}

ベストアンサー1

そしてzshまたはbashまたはyash -o braceexpand

$ mkdir dir-{01..50}
$ touch dir-{01..50}/file{01..50}.txt
$ ls dir-45
file01.txt file09.txt file17.txt file25.txt file33.txt file41.txt file49.txt
file02.txt file10.txt file18.txt file26.txt file34.txt file42.txt file50.txt
file03.txt file11.txt file19.txt file27.txt file35.txt file43.txt
file04.txt file12.txt file20.txt file28.txt file36.txt file44.txt
file05.txt file13.txt file21.txt file29.txt file37.txt file45.txt
file06.txt file14.txt file22.txt file30.txt file38.txt file46.txt
file07.txt file15.txt file23.txt file31.txt file39.txt file47.txt
file08.txt file16.txt file24.txt file32.txt file40.txt file48.txt

$ tar -cf archive.tar dir-{01..50}

そしてksh93

$ mkdir dir-{01..50%02d}
$ touch dir-{01..50%02d}/file{01..50%02d}.txt
$ tar -cf archive.tar dir-{01..50%02d}

中括弧ksh93拡張は、printf()ゼロで埋められた数値を作成するために使用できるスタイル形式の文字列を使用します。


POSIXの使用sh:

i=0    
while [ "$(( i += 1 ))" -le 50 ]; do
    zi=$( printf '%02d' "$i" )
    mkdir "dir-$zi"

    j=0
    while [ "$(( j += 1 ))" -le 50 ]; do
        zj=$( printf '%02d' "$j" )
        touch "dir-$zi/file$zj.txt"
    done
done

tar -cf archive.tar dir-*  # assuming only the folders we just created exists

tarあまりにも多くのファイルを生成せずにアーカイブを生成する代替方法は次のとおりですbash

mkdir dir-01
touch dir-01/file{01..50}.txt
tar -cf archive.tar dir-01

for i in {02..50}; do
    mv "dir-$(( i - 1 ))" "dir-$i"
    tar -uf archive.tar "dir-$i"
done

これはディレクトリを作成し、それをアーカイブに追加するだけです。 50のディレクトリ内のすべてのファイルは名前と内容が同じであるため、そのディレクトリの名前を変更し、それを連続して繰り返しアーカイブに追加して、49の異なるディレクトリを追加します。

おすすめ記事