例如,在这个 for 循环中
for var in ?????
do
dummy command
done
我希望能够循环遍历当前所在目录中的每个目录,但这将是一个未知的目录列表,因此我无法将每个目录写入问号所在的位置。任何帮助表示赞赏。
答案1
最简单的,就是满足你的要求“循环遍历我当前所在目录中的每个目录",只需使用通配符
for d in */
do
dummy_command "$d"
done
如果您的命令无法处理 的尾部斜杠,您可以通过替换为 来$d
删除它。"$d"
"${d%/}"
如果您的命令可以接受多个参数,则根本不需要循环
dummy_command */
dummy_command
测试的一个例子可能很简单echo
。
注意在所有情况下,如果模式不匹配*/
,它将作为字面星号和斜杠传递给您的命令。这几乎肯定不是您想要的。
因为bash
您可以通过在循环上方添加此行来修复它,但请注意它将从该点开始应用
shopt -s nullglob # Expand unmatched wildcards to "nothing"
...直到你有一个对应的shopt -u nullglob
或者你的脚本结束
答案2
如果您想要更多地控制诸如最小/最大深度之类的事情,您可以在 while 循环中使用 find :
while IFS= read -r dir; do
echo "$dir"
done < <(find . -type d)
然后,只需更改您的查找选项即可满足您的需要。就像如果您正在寻找带有空格的目录名称一样,您可以这样做find . -type d -name '* *'
答案3
像这样(递归地列出文件名中带有空格的目录):
shopt -s globstar
dummy_command **/*' '*/
或者如果您坚持使用 for 循环:
shopt -s globstar
for dir in **/*' '*/
dummy_command "$dir"
done