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 -f
no 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
find
alternativa devuelve "éxito" incluso si algún archivo no se elimina con éxito; No es bueno para el guión.find
comando, 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
?-prune
no 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 -rf
debería aplicarCambie la
dotglob
opción de su shell y use*
, o use algo comofind
.fuente
rm -rf /some/dir
y 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
if
para 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
find
comando; por ejemplo,find /path ! -name '.' ! -name '..' -delete
. Si solo desea descender eln
número de directorios, use la-maxdepth n
opción justo después del/path
pará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 -delete
Suponiendo 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./dir
directorio en sí.Si no desea eliminar el directorio en sí, puede volver a crearlo más tarde o usar
o si
find
no es compatible-delete
,El uso le
-mindepth 1
permite mantener el directorio de nivel superior./dir
.fuente
Te sugiero que experimentes con
Turn- SOBRE puntos (archivos ocultos)
conjunto
dotglob
shopt -s dotglob
Turn- OFF puntos
desarmado
dotglob
shopt -u dotglob
Este 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_splitter
directorio. De cualquier manera, tiene una.svn
carpeta que debe eliminarse y copiarse.De la
man
página ...referencias:
fuente
Prueba este código:
fuente