2010-09-01 10 views
5

¿Alguien me puede dar un script bash o un comando de línea que pueda ejecutar en Linux para examinar recursivamente cada carpeta de la carpeta actual y eliminar todos los archivos o directorios comenzando por '._ ¿?Script Bash para recorrer paso a paso las carpetas y eliminar archivos

+1

Just FYI: los archivos '._' se llaman archivos AppleDouble. En los sistemas Mac, los archivos tienen una bifurcación de datos y una bifurcación de recursos. La bifurcación de recursos contiene información como iconos, la posición espacial del archivo en la carpeta (en Finder) y otros metadatos. La bifurcación de datos (el archivo real) contiene los datos importantes reales, por lo que descartar el archivo AppleDouble no debería ser problemático. – dreamlax

Respuesta

14

Cambie el directorio al directorio raíz que desea (o cambiar . al directorio) y ejecutar:

find . -name "._*" -print0 | xargs -0 rm -rf 

xargs permite pasar varios parámetros a un solo comando, por lo que será más rápido que utilizar la sintaxis find -exec. Además, puede ejecutar esto una vez sin | para ver los archivos que eliminará, asegúrese de que sea seguro.

+2

Esto se confundirá con los nombres de archivo con espacios, que son comunes si se trata de archivos de un entorno Mac. Utilice las opciones de delimitador nulo para 'encontrar' y' xargs' ('encontrar.-nombre" ._ * "-print0 | xargs -0 rm -rf') para evitar este problema. –

+0

Sí ... el formato exec es mucho más seguro y más fácil. –

+0

@Gordon, gracias, actualicé mi solución. –

2
find . -name '._*' -exec rm -Rf {} \; 
+0

Probablemente quiera usar '. /' En lugar de '/' – dreamlax

+0

El autor pidió que "vaya a través de cada carpeta desde una carpeta raíz". –

+0

Hay una sutil diferencia entre * la * carpeta raíz y * a * carpeta raíz. – dreamlax

0

He tenido un problema similar hace un tiempo (supongo que está intentando limpiar una unidad que estaba conectada a una Mac que guarda muchos de estos archivos), así que escribí una secuencia de comandos python simple que elimina estos y otros archivos inútiles; tal vez será útil para usted:

http://github.com/houbysoft/short/blob/master/tidy

+0

Sí, asumiste correctamente. Supuestamente es algo que Apple está buscando arreglar para hacer que las Mac sean más "amigables con la red". – link664

0
find /path -name "._*" -exec rm -fr "{}" +; 
-3

find . -name '.*' -delete

un poco más corto y obtener mejores resultados en el caso de extremadamente larga lista de archivos.

+1

Noooooooo! '. *' eliminará todos tus archivos de puntos, y los necesitas !!! No hagas esta gente. Es una mala idea. – daviewales

0

En lugar de eliminar los archivos AppleDouble, puede fusionarlos con los archivos correspondientes. Puede usar dot_clean.

dot_clean - Merge ._ * archivos con los archivos nativos correspondientes.

Para cada dir, dot_clean fusiona recursivamente todos los archivos ._ * con sus archivos nativos correspondientes de acuerdo con las reglas especificadas con los argumentos dados. De forma predeterminada, si hay un atributo en el archivo nativo que también está presente en el archivo ._, se usará el atributo más reciente.

Si no se muestran los operandos, se emite un mensaje de uso. Si se proporciona más de un directorio, los directorios se fusionan en el orden en que se especifican.

Debido dot_clean funciona de forma recursiva por defecto, utilice:

dot_clean <directory> 

Si desea apagar el recursiva combinar, utilizar -f de fusión plana.

dot_clean -f <directory> 
Cuestiones relacionadas