【问题标题】:Script that make folders and files in every folder在每个文件夹中创建文件夹和文件的脚本
【发布时间】:2023-08-20 15:38:01
【问题描述】:

您是否知道 shell 中的脚本在以下条件下会是什么样子: 执行时,它必须使 具有特定编号的文件夹 在每个文件夹中,它必须从 0-9 制作空白文件

最重要的是,必须创建另一个目录,其中包含一个文件,计算每个目录中有多少个文件?

提前谢谢你!

【问题讨论】:

  • counting how many files are in each directory? - 如果每个文件夹中有0-9的空白文件,每个文件夹会有10个文件......
  • 不,总共。最后一个目录将称为 A-Z,其中包含所有目录的文件总数的文件。
  • 所以是 260 个文件?
  • 没错。必须说从A目录到Z目录里面的文件总数是260个。

标签: linux shell scripting


【解决方案1】:

shell 脚本可能如下所示:

#!/bin/bash
count=0

for x in {A..Z}; do
    mkdir ${x}
    pushd ${x} > /dev/null || exit 1
    for y in {0..9}; do
        count=$((count + 1))
        touch $y
    done
    popd > /dev/null || exit 1
done

mkdir counter
echo $count > counter/result

这就是你要找的吗?

发生了什么?

我们在字符 A 到 Z 的范围内,并创建一个以当前字符命名的目录。

pushd <dir> 导航到目录。 (> /dev/null 抑制 pushd 的日志记录)

现在我们在新创建的目录中,我们可以通过在该文件名上调用 touch 来创建文件 0..9。 在这里我们还可以增加计数器,因为我们刚刚创建了一个文件。

创建所有十个文件后,我们使用 popd 回到我们原来的目录并继续循环。

【讨论】:

  • 它按预期工作。万分感谢。你能向我解释一下这是如何工作的吗?我设法在 {A..Z} 中使用 for char 创建目录; do 但是似乎没有弄清楚如何在一行中的每个目录中创建文件。
  • 我编辑答案以解释基本步骤。它对你有帮助吗?诀窍是使用pushd/popd 进入新创建的目录。
  • 我刚刚添加了` ||退出 1` 到 pushd 和 popd,所以当其中一个命令失败时我们退出脚本。