如何将所有目录名写入文本文件

我想列出我的子目录。 当我执行以下for循环时,第一个目录名称出现两次

for d in */; do echo $d >> directories.txt done 

输出如下:

 ONE/ TWO/ ONE/ 

问题出在哪儿?

改进您当前的代码,这个命令应该是有帮助的:

 for d in ./*;do [[ -d "$d" ]] && echo "$d" >> dir.txt; done 

要从输出中删除./

 for d in ./*;do [[ -d "$d" ]] && echo "${d##./}" >> dir.txt; done 

您将附加条目(>>) ,您必须覆盖它们(>) 。 最好使用find 。 要递归查找所有子目录,请使用

 find . -type d > directories.txt 

要仅在当前目录中查找子目录,请使用

 find . -type d -maxdepth 1 > directories.txt 

-type d指示find仅列出目录文件。

让我感到惊讶的是,你的解决方案中缺少分号(;),当你这样做时,你的问题是否仍然存在:

 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