Tentando encontrar pastas que contenham apenas um arquivo

1

Eu gostaria de um comando de busca (ou similar) que, quando apontado para uma pasta, listaria todos os arquivos que moram dentro dessa pasta ou qualquer uma de suas subpastas, mas apenas se a pasta contiver um único arquivo. Para colocar de outra forma, quero listar o conteúdo de pastas que contêm apenas um arquivo.

Então, os seguintes arquivos

/Foldera/folderb
/Foldera/folderb/test1.txt
/Foldera/folderb/test2.txt
/Foldera/folderc
/Foldera/folderd/test3.txt
/Foldera/folderc/foldere

ele produziria

/Foldera/folderd/test3.txt
    
por Paul Taylor 17.02.2014 / 11:49

2 respostas

0

Com Bash 3:

find . -type d -exec sh -c \
'[[ $(find "$0" -mindepth 1 | wc -l) -eq 1 ]] && [[ $(find "$0" -mindepth 1 -type d | wc -l) -eq 0 ]]  && echo "$0"' \
{} \;

Com o Bash 4:

shopt -s globstar
for dir in **/; do 
  [[ $(find "$dir" -mindepth 1 | wc -l) -eq 1 ]] && [[ $(find "$dir" -mindepth 1 -type d | wc -l) -eq 0 ]]  && echo "$dir"
done

Em essência, faça uma iteração sobre cada diretório e, em seguida, verifique se esse diretório contém exatamente um filho (arquivo ou diretório) e verifique se esse filho não é um diretório. Se houver exatamente um filho e não for um diretório, echo it.

Esteja avisado: isso falhará se diretórios ou arquivos contiverem uma nova linha em seu nome.

Pode ser mais fácil se você tiver utilitários GNU como find com uma opção -printf , mas o OS X não tem isso por padrão.

    
por 17.02.2014 / 20:53
-1

Eu não tenho um Mac para testar isso, mas encontrei muitas respostas quando pesquisei sua pergunta no Google.

find . -type 'f' -printf '%h\n' | sort | uniq -c

Isso irá imprimir quantos arquivos existem em cada pasta e, em seguida, usando o grep ou alguma outra ferramenta que você pode reduzi-lo.

Gostaria de verificar a fonte abaixo, é para o Windows, mas eles têm muitas soluções de perl que podem funcionar tão bem.

Questão semelhante: Source

    
por 17.02.2014 / 19:35

Tags