我想列出我的子目录。当我执行以下 for 循环时,第一个目录名称出现两次
for d in */; do
echo $d >> directories.txt
done
输出如下:
ONE/
TWO/
ONE/
哪里有问题?
答案1
改进您当前的代码,这个命令应该会有所帮助:
for d in ./*;do [[ -d "$d" ]] && echo "$d" >> dir.txt; done
./
要从输出中删除:
for d in ./*;do [[ -d "$d" ]] && echo "${d##./}" >> dir.txt; done
答案2
您正在将条目附加(>>)
到必须覆盖它们的位置(>)
。最好使用find
。要递归查找所有子目录,请使用
find . -type d > directories.txt
要仅在当前目录中查找子目录,请使用
find . -type d -maxdepth 1 > directories.txt
-type d
指示 find 仅列出目录文件。
答案3
令我惊讶的是,您的解决方案中缺少分号(;),当您这样做时问题是否仍然存在:
for d in *; do echo $d >> directories.txt; done
?对我来说它运行良好。另外,你确定你在 bash 中运行它吗?最后,“>>”可能是问题所在,你可能多次附加了目录名称。
更不用说如果您只想列出目录(而不是文件),您可以这样做:
for d in `find . -type d -maxdepth 1`; do echo $d >> directories.txt; done
或者更简单:
find . -type d -maxdepth 1 > directories.txt