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.xargs
comando funcionó bien.-name: busca el nombre pasado. Puede usar
-regex
para proporcionar nombres basados en expresiones regulares-type: busca tipos de archivo.
d
solo 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 -delete
que es más fácil de recordar
fuente
Como señala otra respuesta, puede intentar encontrar todos los directorios con el nombre
test
y 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
test
tiene archivos,find
se quejará de esoDirectory is not empty
y no eliminará el directorio.Si pretendía eliminar todos los archivos, incluido el
test
directorio, entonces podemos usar el mismo truco para eliminar todos los archivos dentro de los directorios nombradostest
primero.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