2009-02-13 27 views
7

¿Cuál es la forma más fácil/mejor de encontrar y eliminar archivos vacíos (cero bytes) usando solo herramientas nativas de Mac OS X?Eliminación de archivos vacíos (cero bytes)

+0

aclarar por favor! un archivo que está vacío, todos los archivos vacíos? ¿Qué has intentado? ¿Dónde están los errores? – hop

+0

Un comentario a mi respuesta aclaró la pregunta; actualizando apropiadamente. –

+0

Gracias Charles Duffy. Perdón por mi mal inglés: p – Bank

Respuesta

15

bastante fácil:

find . -type f -size 0 -exec rm -f '{}' + 

para ignorar cualquier archivo que tenga xattr contenido (suponiendo que la aplicación MacOS find):

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

Dicho esto, tenga en cuenta que muchos xattrs no son particularmente útiles (Por ejemplo, com.apple.quarantine existe en todos los archivos descargados).

+1

-type f buena llamada – dwc

+0

uso encontrar. -size 0 -exec rm {} \; pero add -type f debería ser mejor – Bank

+0

Entonces, ¿en inglés, "encuentra todos los archivos vacíos en el directorio actual y elimínalos sin preguntar al usuario"? – endolith

1
find /path/to/stuff -empty 

Si eso es la lista de archivos que está buscando a continuación, hacer que el comando:

find /path/to/stuff -empty -exec rm {} \; 

Tenga cuidado! ¡No habrá forma de deshacer esto!

+0

Es mejor usar + que; si tiene un hallazgo actual, de esa manera actúa como lo haría xargs si estuviera en la tubería. –

1

Uso:

find . -type f -size 0b -exec rm {} ';' 

con todas las otras variantes posibles para limitar lo que se elimina.

8

Puede disminuir el número potencialmente enorme de las horquillas al ejecutar/bin/rm por:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

El comando anterior es muy portátil, que se ejecuta en la mayoría de las versiones de Unix y no sólo a las cajas de Linux, y en las versiones de Unix que se remonta a décadas. Para largas listas de archivos, se pueden ejecutar varios comandos /bin/rm para evitar que la lista sobrepase el límite de longitud de la línea de comando.

Un efecto similar se puede lograr con menos a escribir en los sistemas operativos más recientes, utilizando un + en find para reemplazar el uso más común de xargs en un estilo todavía se presta a otras acciones además de /bin/rm. En este caso, find manejará la división de listas de archivos realmente largas en comandos separados /bin/rm. El {} se cita habitualmente para evitar que el shell le haga algo; las cotizaciones no siempre son necesarios, pero las complejidades de la cáscara de citación, es demasiado complicado para cubrir aquí, así que en caso de duda, incluir los apóstrofes:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

En Linux, los enfoques más breves suelen estar disponibles utilizando -delete. Tenga en cuenta que find reciente -delete primario se implementa directamente con unlink (2) y no engendra un millón de comandos /bin/rm, o incluso los pocos que xargs y + hacen. Mac OS find también tiene los primarios -delete y -empty.

find . -type f -empty -delete 

Para pisar archivos vacíos (y recién vaciadas-) - directorios, así - muchos moderno, que consta de Linux pueden utilizar este enfoque eficiente:

find . -empty -delete 
+1

+1 Esta es la mejor respuesta. –

+1

Esto _ mejora_ la portabilidad, se concede, pero 'find -exec ... {} +' está disponible más allá de Linux. Inmediatamente, tanto Solaris 11 como OS X son compatibles con esta reciente adición a la especificación POSIX para find (agregada en el número 6 de 1003.1). –

+0

La sintaxis '+' es menos portátil, pero aún bastante portátil. Definitivamente no está disponible en un número de * old * Unixen que * do * have 'xargs'. 'xargs' también es mucho más flexible que el' + ', aunque la frecuencia de necesidad de esa flexión extra es muy baja. Agregaré la forma '+', sin embargo. –

Cuestiones relacionadas