Lo siento, olvidé mencionar que estos directorios pueden tener archivos. No pude eliminar algunos de ellos debido al error "buscar: no se puede eliminar` ./start ': el directorio no está vacío "
recolección de basura
@garbagecollection Agregué una actualización.
Jaypal Singh
3
podría usar en +lugar de \;pasar más de un directorio a la vez.
jfs
Gracias @JFSebastian Buen punto. Lo agregaré a la respuesta.
Como señala otra respuesta, puede intentar encontrar todos los directorios con el nombre testy eliminarlos
find -name "test" -type d -delete
Me encontré con algunos problemas con la compatibilidad cruzada en Mac, así que usé este comando equivalente:
find -path "*/test" -type d -delete
-path : busca un patrón en el nombre de archivo completo.
Sin embargo, en cualquiera de los casos, si alguno de los directorios nombrados testtiene archivos, findse quejará de eso Directory is not emptyy no eliminará el directorio.
Si pretendía eliminar todos los archivos, incluido el testdirectorio, entonces podemos usar el mismo truco para eliminar todos los archivos dentro de los directorios nombrados testprimero.
find -path "*/test/*" -delete
El patrón: "*/test/*"garantizará que solo eliminemos archivos dentro de un directorio llamado /test/. Una vez que los directorios están vacíos, podemos continuar y eliminar los directorios con el primer comando:
find -path "*/test" -type d -delete
Ejemplo:
$ 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
+en el hallazgo. No tenía idea, definitivamente desearía haberlo sabido hace mucho tiempo.xargscomando funcionó bien.-name: busca el nombre pasado. Puede usar
-regexpara proporcionar nombres basados en expresiones regulares-type: busca tipos de archivo.
dsolo busca directorios-delete: acción que elimina la lista encontrada.
Alternativamente:
Como JF Sebastian declaró en los comentarios:
Puede usar en
+lugar de\;pasar más de un directorio a la vez.fuente
+lugar de\;pasar más de un directorio a la vez.otra forma de hacer esto es
Un enlace útil para encontrar: http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
fuente
También puede usar la opción -exec
fuente
Asumiendo bash 4+
La barra diagonal final significa que solo coincidirá con los directorios. La prueba es de antemano con:
fuente
Suponga que está usando gnu find , puede usar la opción -delete:
find . -name test -deleteque es más fácil de recordar
fuente
Como señala otra respuesta, puede intentar encontrar todos los directorios con el nombre
testy eliminarlosMe encontré con algunos problemas con la compatibilidad cruzada en Mac, así que usé este comando equivalente:
Sin embargo, en cualquiera de los casos, si alguno de los directorios nombrados
testtiene archivos,findse quejará de esoDirectory is not emptyy no eliminará el directorio.Si pretendía eliminar todos los archivos, incluido el
testdirectorio, entonces podemos usar el mismo truco para eliminar todos los archivos dentro de los directorios nombradostestprimero.El patrón:
"*/test/*"garantizará que solo eliminemos archivos dentro de un directorio llamado/test/. Una vez que los directorios están vacíos, podemos continuar y eliminar los directorios con el primer comando:Ejemplo:
fuente