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

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

我想列出我的子目录。当我执行以下 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

相关内容