如何将所有目录名写入文本文件
我想列出我的子目录。 当我执行以下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