Desculpe, esqueci de mencionar que esses diretórios podem ter arquivos. Não pude excluir alguns deles por causa do erro "localizar: não consigo excluir` ./start ': o diretório não está vazio "
coleta de lixo
@garbagecollection Adicionei uma atualização.
Jaypal singh
3
você pode usar em +vez de \;passar mais de um diretório por vez.
JFS
Obrigado @JFSebastian Bom ponto. Vou adicioná-lo à resposta.
Como outra resposta aponta, você pode tentar encontrar todos os diretórios com o nome teste excluí-los
find -name "test" -type d -delete
Eu tive alguns problemas com compatibilidade cruzada no Mac, então usei este comando equivalente:
find -path "*/test" -type d -delete
-caminho : procura um padrão no nome do arquivo completo.
Em qualquer um dos casos, no entanto, se algum dos diretórios nomeados testtiver arquivos, eles findreclamarão Directory is not emptye não conseguirão remover o diretório.
Se você pretendia excluir todos os arquivos, incluindo o testdiretório, podemos usar o mesmo truque para excluir todos os arquivos dentro dos diretórios nomeados testprimeiro.
find -path "*/test/*" -delete
O padrão "*/test/*":, garantirá que apenas excluamos arquivos dentro de um diretório chamado /test/. Depois que os diretórios estiverem vazios, podemos prosseguir e excluir os diretórios usando o primeiro comando:
find -path "*/test" -type d -delete
Exemplo:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+
em encontrar. Eu não tinha ideia, definitivamente desejava ter sabido disso há muito tempo.xargs
comando funcionou bem.-name: procura o nome passado. Você pode usar
-regex
para fornecer nomes com base em expressões regulares-type: procura por tipos de arquivo.
d
procura apenas diretórios-delete: ação que exclui a lista encontrada.
Alternativamente:
Como JF Sebastian afirmou nos comentários:
Você pode usar em
+
vez de\;
passar mais de um diretório por vez.fonte
+
vez de\;
passar mais de um diretório por vez.ainda outra maneira de fazer isso é
Um link útil para encontrar: http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
fonte
Você também pode usar a opção -exec
fonte
Assumindo bash 4+
A barra final significa que corresponderá apenas aos diretórios. O teste é antecipado com:
fonte
Suponha que você esteja usando o gnu find , você pode usar a opção -delete:
find . -name test -delete
o que é mais fácil de lembrar.
fonte
Como outra resposta aponta, você pode tentar encontrar todos os diretórios com o nome
test
e excluí-losEu tive alguns problemas com compatibilidade cruzada no Mac, então usei este comando equivalente:
Em qualquer um dos casos, no entanto, se algum dos diretórios nomeados
test
tiver arquivos, elesfind
reclamarãoDirectory is not empty
e não conseguirão remover o diretório.Se você pretendia excluir todos os arquivos, incluindo o
test
diretório, podemos usar o mesmo truque para excluir todos os arquivos dentro dos diretórios nomeadostest
primeiro.O padrão
"*/test/*"
:, garantirá que apenas excluamos arquivos dentro de um diretório chamado/test/
. Depois que os diretórios estiverem vazios, podemos prosseguir e excluir os diretórios usando o primeiro comando:Exemplo:
fonte