我是脚本/编程/一切的新手,似乎无法弄清楚我试图迭代的这个bash脚本/循环。
我有一个名为“folder”的目录,其中有许多子目录,每个子目录都包含我想要回显的文件(现在)
我有这个,但它似乎不打印子目录中的文件,而是打印子目录本身。我如何改变脚本以使其工作?
for directory in *;
do
for thing in $directory
do
echo $thing
done
done
答案 0 :(得分:3)
for
循环本身并不遍历文件系统;它只迭代一串字符串。您需要迭代第二个循环的路径名扩展结果。
for directory in *;
do
for thing in "$directory"/*
do
echo "$thing"
done
done
您可以使用一个具有更复杂模式的循环来执行此操作:
for thing in */*; do
echo "$thing"
done
答案 1 :(得分:1)
Bash 4.0版添加了一个名为globstar
的新globbing选项,它在设置时以不同方式处理模式**
。
#!/bin/bash
shopt -s globstar
for file in folder/** # with '**' bash recurses all the directories
do
echo "$file"
done