Estoy ejecutando el siguiente comando:
find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;
Me gustaría eliminar todas las carpetas debajo de la processing
carpeta (la carpeta de procesamiento nunca debe eliminarse).
El comando también está eliminando la processing
carpeta. ¿Cómo limito el script para eliminar solo las carpetas de esa carpeta?
Respuestas:
La forma más sencilla sería simplemente agregar
-mindepth 1
, lo que omitirá la primera jerarquía de profundidad y , por lo tanto, omitirá el directorio principal.Además, no necesita una
-exec
llamada adicional arm
, puede simplementedelete
las carpetas directamente si están vacías.Si no están vacíos:
Si eres flojo, también puedes expandir un comodín. Como
*
no incluye el directorio actual de forma predeterminada (a menos quedotglob
esté configurado ), también puede hacer:Sin embargo, esto tampoco incluiría carpetas ocultas, nuevamente debido a la
dotglob
opción.fuente
El problema es que find devuelve el directorio actual (.) Junto con los otros directorios, por lo que elimina la carpeta de procesamiento y los subdirectorios. Una forma rápida de evitar eso sería agregar la opción
que detiene la salida del directorio actual y, a su vez, evita que se elimine.
Eso funcionaría si estuviera ejecutando el comando dentro del directorio de procesamiento, para tener en cuenta el hecho de que está utilizando una ruta absoluta:
Y todo el comando sería:
fuente
-name
se refiere a basename, nunca coincide con nada con una barra inclinada. Probablemente necesites usar-path
.Ya respondido, aún me gustaría enumerar otro enfoque.
find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d
Esto excluirá el directorio superior (y también los subdirectorios), y ahora puede aplicar cualquier comando que queramos aplicar sobre él.
>> Opciones:
-mindepth 1: para excluir el directorio raíz
-maxdepth 1: para evitar analizar subdirectorios. (Para un escenario particular como el cuestionado, no necesita esto).
-type d: Lista solo los tipos de directorio. Esta opción debería aparecer después de usar mindepth maxdepth.
fuente
-maxdepth 1
? ¿Por qué-type d
dos veces? ¿Cómo es esto diferente a la respuesta aceptada?