Quiero "limpiar" todos los archivos de un directorio, incluidos todos los archivos en subdirectorios, pero quiero dejar los subdirectorios en su lugar. Tengo entendido rm -r
que también eliminará los subdirectorios.
Yo no deseo borrar los archivos ocultos (punto).
¿Cómo se puede hacer esto?
command-line
find
rm
Scott Wilton
fuente
fuente
find -type f ! -name "[.]*" -delete
¿no es adecuado?-delete
él, solo imprima los nombres de archivo para eliminar.Respuestas:
Uso
find
para eso:fuente
-delete
I do not want to delete hidden (dot) files.
+
(al menos no en las familias Bourne, csh o rc). Hay una leyenda que dice que algunas versiones antiguas decsh
escapes requeridos,{}
pero nunca me he encontrado con eso.find . ! -name '.*' ! -type d ! -path '*/.*'
debe hacer el trabajo.find . -name '.?*' -prune -o ! -type d -exec rm {} +
evitar descender por completo. Tenga en cuenta que--
no es necesario aquí (aunque no hace daño) ya que las rutas comienzan con./
.prueba algo como:
fuente
.... -exec rm {} +
?-exec rm {} +
no es paralelo, solo llamarm
con varios nombres de archivo. Ejecuta menosrm
invocaciones, por lo que es más amigable con los recursos. Si es un poco menos seguro porque amplía la ventana de carrera dentro de la cual un componente de directorio de los archivos para eliminar puede cambiarse a un enlace simbólico. Pero solo-delete
o-execdir rm {} \;
abordaría completamente eso.-exec
es estándar.-delete
y-execdir
viniendo de BSDs, sin embargo, GNU los agregó unos 10 años después. En cualquier caso, eso no tiene nada que ver con Linux, que es solo un núcleo.