Cuando uso
find /home/user/parentdir -type d -empty -delete
busca recursivamente subcarpetas vacías dentro /home/user/parentdiry las elimina. Pero si /home/user/parentdirtambién está vacío, también elimina la parentdircarpeta, lo que no es deseable para mí.
Quiero guardar esto parentdiren rsyncalgunos archivos para hacer una copia de seguridad o en la nube. Después del procesamiento, necesito eliminar las carpetas vacías, pero parece improductivo volver a crear parentdircada vez.
¿Alguna sugerencia para mantener parentdir? Pensé en crear un .nocopyarchivo dentro de él y excluirlo rsync, pero parece excesivo. ¿Hay alguna forma más elegante?
command-line
bash
rsync
find
TNT
fuente
fuente

-mindepth 1?Respuestas:
Simplemente hazlo
find /home/user/parentdir -mindepth 1 -type d -empty -delete.Mira:
La
find /home/user/parentdir/*respuesta en AmourK no es deseable cuando hay muchos archivos y es demasiado complicada.fuente
Al agregar
/*al final deparentdir, está realizando la acción en todos los subdirectorios de parentdir en lugar de enparentdirsí mismo. Y así, de la misma manera,/home/user/no se elimina en el comando anterior,parentdirno se eliminará en el siguiente comando.*se llama operador global y coincide con cualquier cadena de caracteres.find /home/user/parentdir/* -type d -empty -deletefuente
/home/user/parentdir/, el globo expandido puede excederARG_MAX, lo que resulta en un error de lista de argumentos demasiado largo . Puede reducir la posibilidad de que eso suceda cambiando el globo para*/que solo coincida con los directorios./tmp, crear un subdirectorio, desempaquetar un tarball comprimido allí, ejecutar el instalador y limpiar. El novato pensó querm -rf /tmp/foo-installera la forma correcta de hacerlo, y cuando la mano experimentada dijo "Noooooo" en su mejor impresión de Darth-Vader-al-final-del-Episodio III, el novato descubrió de la manera difícil qué tan cerca / y las teclas Enter estaban el uno al otro. Tuvimos que arrancar desde el disco de restauración del software de respaldo y volver a cargar todo el servidor desde la cinta.si tienes php-cli instalado,
fuente
foreach (RecursiveIteratorIterator(RecursiveDirectoryIterator($dir)) as $p) if (empty($skipped)) $skipped = TRUE; elseif ($p->isDir()) @rmdir($p->getPathname());o algo parecido a eso.$skippedse encarga de omitir el primero,@rmdirintenta eliminar un directorio y silenciosamente (esa es la @) falla si no está vacío.Cuando solo necesita un nivel (dejar una carpeta principal, pero eliminar carpetas secundarias vacías), un truco fácil es usar
rmdir.Elimina todas las subcarpetas vacías, pero solo imprime un error para archivos y carpetas no vacías.
Esto no funciona de forma recursiva, pero al conocer la estructura de su carpeta puede ser la forma más rápida de hacer algo como
Ventaja: fácil de recordar, rápido de escribir, poco potencial para elegir un parámetro incorrecto.
Desventaja: Menos flexible, posiblemente muchos mensajes de error en su terminal.
fuente