创建包含 50 个文件的 50 个目录

Bab*_*hka 6 directory files touch

我正在尝试创建 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...
Run Code Online (Sandbox Code Playgroud)

我能够创建目录,但是在每个目录中创建文件时遇到问题。我也试图在之后将所有这些压缩到一个 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}
Run Code Online (Sandbox Code Playgroud)

我知道第二个循环是错误的,但我不确定如何继续。任何建议表示赞赏。

这似乎有效,但我不确定它的语法或格式是否正确:

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}
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 25

zshbashyash -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}
Run Code Online (Sandbox Code Playgroud)

ksh93

$ mkdir dir-{01..50%02d}
$ touch dir-{01..50%02d}/file{01..50%02d}.txt
$ tar -cf archive.tar dir-{01..50%02d}
Run Code Online (Sandbox Code Playgroud)

ksh93括号扩展采用printf()-style 格式字符串,可用于创建零填充数字。


使用 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这只是创建目录之一并将其添加到存档中。由于所有 50 个目录中的所有文件在名称和内容上都相同,因此它会重命名该目录并将其附加到连续迭代中的存档以添加其他 49 个目录。

  • 简单,因为它是最好的。喜欢 touch dir-{1..50}/file{00..50}.txt 部分 (2认同)

小智 6

对于每个目录,创建 50 个文件:

for i in {1..50}; do
    mkdir dir$i
    touch dir$i/file{1..50}
done
Run Code Online (Sandbox Code Playgroud)

并进行计数,ls -l dir*/* | nl= 2500


Sté*_*las 6

POSIXly,并避免在 50 x 50 文件路径列表可能超过 args+env 大小限制时出现问题:

awk 'BEGIN{for (i = 1; i <= 50; i++) printf "dir-%02d\n", i}' |
  xargs mkdir &&

  awk 'BEGIN{for (i = 1; i <= 50; i++)
              for (j = 1; j <= 50; j++)
                printf "dir-%02d/file-%02d.txt\n", i, j}' |
    xargs touch
Run Code Online (Sandbox Code Playgroud)

随着zsh(其中{01..50}来自),就可以解决的参数列表太长zargs

autoload zargs
mkdir dir-{01..50}
zargs dir-{01..50}/file-{01..50}.txt -- touch
Run Code Online (Sandbox Code Playgroud)

您还可以创建dir{02..50}符号链接dir-01并使用该h tar选项:

mkdir dir-01
touch dir-01/file-{01..05}
for d in dir-{02..05}; do ln -s dir-01 "$f"; done
tar zchf file.tar.gz dir-{01..50}
Run Code Online (Sandbox Code Playgroud)