rm -rf /some/path/* elimina todos los archivos no ocultos en ese directorio (y subdirecciones).
rm -rf /some/path/.* elimina todos los archivos ocultos en ese directorio (pero no subdirecciona) y también da el siguiente error / advertencia:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
¿Cuál es la forma correcta de eliminar todos los archivos y carpetas ocultos y no ocultos de forma recursiva en un directorio de destino sin recibir la advertencia / error sobre .y ..?

rm ..?* .[!.]*debería hacerlo).*coincide con todos los archivos que no son de punto,.[!.]*coincide con todos los archivos de punto excepto.y los archivos cuyo nombre comienza con.., y..?*coincide con todos los archivos de punto-punto excepto... Juntos coinciden con todos los archivos que no sean.y... Si alguno de estos tres patrones no coincide con nada, se expande a sí mismo;rm -fno le importan los argumentos inexistentes, por lo que esto no importa.También puedes usar
find. Esto es más complejo, pero tiene la ventaja de funcionar incluso si hay tantos archivos que los comodines anteriores se expandirían más allá del límite de longitud de la línea de comandos de su sistema.Puede que le resulte más claro eliminar y volver a crear el directorio. Esto tiene la ventaja (o desventaja, según sea el caso) de dar como resultado un directorio vacío, incluso si otro programa está creando archivos al mismo tiempo en el directorio original.
fuente
findalternativa devuelve "éxito" incluso si algún archivo no se elimina con éxito; No es bueno para el guión.findcomando, la página de manual para encontrar estados "Debido a que -delete implica -depth, no puede usar -prune y -delete juntos". - ¿Aún lo usas-prune -delete?-pruneno hace nada aquí. Y al volver a leer veo que no respondí la pregunta correctamente: me ocupé de no recurrir, pero la pregunta explícitamente solicita la eliminación recursiva. He corregido mi respuesta..[^.]*lugar de.[!.]*cuando la sustitución del historial está habilitada (que de forma predeterminada es el caso de forma interactiva pero no en scripts), porque zsh analiza!como referencia de historial. Pero en zsh no necesitaría eso en primer lugar, solo puede usar*(D)para incluir archivos de puntos (sin.o..) en la coincidencia de comodines.Me acabo de dar cuenta de que esta es la forma más conveniente en la mayoría de las distribuciones de Linux:
dónde
-A= enumerar todo excepto.y..-1= poner cada artículo en una líneafuente
ls -A1 /your/path/ | xargs rm -rfdebería aplicarCambie la
dotglobopción de su shell y use*, o use algo comofind.fuente
rm -rf /some/diry luego crear un nuevo directorio vacío en su lugar.Esto debería funcionar igual que @Gilles answer pero más compacto:
o
También debe agregar un
ifpara uso en scripts solo para estar seguro:fuente
alias cleandir='rm -rf {,.[!.],..?}*'hace.Encuentra es tu amigo.
Si desea utilizar la búsqueda recursiva en otro directorio actual ($ PWD), agregue una ruta justo después del
findcomando; por ejemplo,find /path ! -name '.' ! -name '..' -delete. Si solo desea descender elnnúmero de directorios, use la-maxdepth nopción justo después del/pathparámetro.El comando anterior se probó en un sistema Ubuntu 13.04. Es probable que funcione en otros sistemas Linux modernos.
fuente
find . ! -name '.' ! -name '..' -type d -deleteSuponiendo que el directorio en cuestión es
./dir, entonceseliminaría todos los archivos
./dir, incluidos los archivos y directorios ocultos, de forma recursiva e incluyendo el./dirdirectorio en sí.Si no desea eliminar el directorio en sí, puede volver a crearlo más tarde o usar
o si
findno es compatible-delete,El uso le
-mindepth 1permite mantener el directorio de nivel superior./dir.fuente
Te sugiero que experimentes con
Turn- SOBRE puntos (archivos ocultos)
conjunto
dotglobshopt -s dotglobTurn- OFF puntos
desarmado
dotglobshopt -u dotglobEste método funcionó exactamente como deseaba un comando de copia al que le faltaban los directorios ocultos.
Así que hice una eliminación (eliminar), y vaya ...
... eso también funciona!
Se me ocurre que su querido lector no puede ver el
message_splitterdirectorio. De cualquier manera, tiene una.svncarpeta que debe eliminarse y copiarse.De la
manpágina ...referencias:
fuente
Prueba este código:
fuente