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 -rque 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
findpara eso:fuente
-deleteI 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 decshescapes 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 llamarmcon varios nombres de archivo. Ejecuta menosrminvocaciones, 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-deleteo-execdir rm {} \;abordaría completamente eso.-execes estándar.-deletey-execdirviniendo 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.