Как записать все имена каталогов в текстовый файл

Я хочу составить список моих подкаталогов. Когда я выполняю следующее для цикла loop, первое имя каталога встречается два раза

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

Вывод выглядит так:

ONE/
TWO/
ONE/

В чем проблема?

0
задан 11 January 2018 в 13:20

3 ответа

Совершенствуя текущий код, эта команда может быть полезна:

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

Чтобы удалить ./ из вывода:

for d in ./*;do [[ -d "$d" ]] && echo "${d##./}" >> dir.txt; done
3
ответ дан 11 January 2018 в 13:20

Вы добавляете записи (>>), где вы должны перезаписывать их (>). Лучше использовать find. Чтобы найти все подкаталоги рекурсивно, используйте

find . -type d > directories.txt

. Чтобы найти подкаталоги только в текущем каталоге, используйте

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

-type d, чтобы найти только список файлов каталога.

2
ответ дан 11 January 2018 в 13:20

Что меня удивляет, так это отсутствие точки с запятой (;) в вашем решении, сохраняется ли ваша проблема, когда вы делаете:

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
1
ответ дан 11 January 2018 в 13:20

Другие вопросы по тегам:

Похожие вопросы: