Como escrever todos os nomes de diretório em um arquivo de texto

0

Eu quero fazer uma lista dos meus subdiretórios. Quando executo o loop a seguir, o primeiro nome do diretório ocorre duas vezes

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

A saída é como:

ONE/
TWO/
ONE/

Onde está o problema?

    
por Krsztr 11.01.2018 / 08:32

3 respostas

2

Melhorando seu código atual, este comando deve ser útil:

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

Para remover o ./ da saída:

for d in ./*;do [[ -d "$d" ]] && echo "${d##./}" >> dir.txt; done
    
por George Udosen 11.01.2018 / 08:59
2

Você está anexando as entradas (>>) onde deve substituí-las (>) . É melhor usar find . Para encontrar todos os subdiretórios recursivamente, use

find . -type d > directories.txt

Para encontrar subdiretórios somente no diretório atual, use

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

-type d instrui a localizar apenas os arquivos de diretório.

    
por Mukesh Sai Kumar 11.01.2018 / 08:39
0

O que me surpreende é a falta de um ponto-e-vírgula (;) em sua solução, seu problema persiste quando você o faz:

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

Isso funciona bem para mim. Além disso, tem certeza de que você o executa na bash? Finalmente, o "> >" pode ser o problema, você pode estar anexando nomes de diretórios várias vezes.

Sem mencionar que, se você quiser listar apenas os diretórios (não os arquivos), você pode fazer:

for d in 'find . -type d -maxdepth 1'; do echo $d >> directories.txt; done

ou ainda mais simples:

find . -type d -maxdepth 1 > directories.txt
    
por Maciek 11.01.2018 / 08:38