find . -type d
pode ser usado para encontrar todos os diretórios abaixo de algum ponto de partida. Mas ele também retorna o diretório atual ( .
), que pode ser indesejável. Como pode ser excluído?
find . -type d
pode ser usado para encontrar todos os diretórios abaixo de algum ponto de partida. Mas ele também retorna o diretório atual ( .
), que pode ser indesejável. Como pode ser excluído?
Respostas:
find . ! -path . -type d
Para este caso em particular ( .
), o golfe é melhor que a mindepth
solução (24 vs 26 caracteres), embora provavelmente seja um pouco mais difícil de digitar por causa do !
.
Para excluir outros diretórios, isso será menos eficiente e requer uma variável para DRYness:
D="long_name"
find "$D" ! -path "$D" -type d
Minha árvore de decisão entre !
e -mindepth
:
!
para portabilidade..
? Jogue uma moeda.long_name
? Use -mindepth
.find / ! -regex '/\(a\|b\)/.*'
ou, mais simplesmente, canalizar através do grep. Para não recursar, o exposto acima seria muito ineficiente e você deve usar -prune
: stackoverflow.com/questions/1489277/…
find
com grep
para excluir o diretório, mas o diretório pai ainda estava lá, fazendo com que tudo fosse excluído de qualquer maneira.
find
, você precisa procurar prefixos: stackoverflow.com/questions/17959317/… Mas um Bash for loop pode lidar com isso :-)
\!
) para estar do lado seguro. Todos os exemplos nas minhas máquinas man find
escaparam, então parece que é provavelmente uma boa idéia ™. Edit - Acabei de notar que ele mesmo diz explicitamente:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
Não apenas a profundidade de recursão de find
pode ser controlada pelo -maxdepth
parâmetro, a profundidade também pode ser limitada de "superior" usando o -mindepth
parâmetro correspondente . Então, o que realmente precisamos é:
find . -mindepth 1 -type d
find . -mindepth 1 -maxdepth 1 -type d ...
Uso find ./* <...>
quando não me importo de ignorar arquivos de ponto de primeiro nível (o *
glob não os corresponde por padrão no bash - veja a opção 'dotglob' no shopt interno: https://www.gnu.org/software/bash /manual/html_node/The-Shopt-Builtin.html ).
eclipse tmp # find. . ./tela ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/default
eclipse tmp # find ./* ./tela ./screen/.testfile2 ./tmux-0 ./tmux-0/default
-exec
opção Por exemplo, se você tentar find dir/* -type d -exec rmdir {} \;
, verá erros.
rmdir
e provavelmente lhe find
dirão que os diretórios não estão vazios, pois farão uma pesquisa profunda nos diretórios, mostrando os pais antes dos filhos.
Bem, uma solução simples também (a solução não estava funcionando para mim no windows git bash)
find * -type d
Pode não ter muito desempenho, mas faz o trabalho e é o que precisamos às vezes.
[Editar]: Como o @AlexanderMills comentou, ele não mostrará diretórios ocultos no local raiz (por exemplo ./.hidden
), mas mostrará subdiretórios ocultos (por exemplo ./folder/.hiddenSub
). [Testado com git bash no windows]
find /path/ ! -path "/path/first" ! -path "/path/second"
-lo dessa maneira?