5 votos

Borrando todos los archivos excepto algunos en Mac en la Terminal

¿Es posible escribir un comando en Terminal que elimine todos los archivos en Mac excepto algunos?

Supongamos que tengo una carpeta general que consta de N carpetas con diferentes títulos/nombres. Necesito conservar todas las carpetas. Sin embargo, necesito eliminar todos los archivos dentro de ellas excepto las fotos. Estas fotos tienen nombres diferentes pero todos comienzan con "image-" en el título.

antes de borrar

¿Hay algún comando que signifique "por favor, elimine todo en estas carpetas excepto los jpgs que comienzan con 'image-'?"

Para que quede así:

después de borrar

¡Gracias!

7voto

Phill Puntos 126

Puedes usar find de la siguiente manera (reemplaza una carpeta general [antes] según sea necesario):

find "una carpeta general [antes]" -type f -not -iname "imagen-*jpg" -exec rm {} \;

La opción -type f selecciona solo archivos (es decir, excluye carpetas, enlaces simbólicos, sockets y otros archivos "especiales").

La opción -iname "imagen-*jpg" es una búsqueda insensible a mayúsculas y minúsculas que selecciona todas las imágenes JPEG que empiezan con imagen-' (o con otras combinaciones de mayúsculas y minúsculas como IMAGEN- o Imagen-). Si prefieres una coincidencia exacta, utiliza -name en su lugar. Dado que esta opción está precedida por -not, la búsqueda se invierte, de modo que find selecciona todos los archivos excepto las imágenes JPEG que empiezan con imagen-.

La opción -exec rm {} \; elimina todos los archivos encontrados por find.

Lo he probado con una estructura de carpetas similar a la que muestras en tu captura de pantalla y estoy seguro de que funciona como se pretende, pero recomiendo encarecidamente que hagas lo siguiente antes de ejecutar el comando anterior:

  1. Haz una copia de tus datos (por ejemplo, duplica la carpeta afectada)
  2. Asegúrate de que find seleccione los archivos correctos ejecutando find "una carpeta general [antes]" -type f -not -iname "imagen-*jpg" -print. Este comando debería listar todos los archivos que no son archivos JPEG cuyo nombre empieza con imagen-.

Para más información sobre find, consulta https://ss64.com/mac/find.html o ejecuta man find en Terminal.

3voto

Ture Pålsson Puntos 46

En primer lugar, es importante recordar que no es Terminal el que ejecuta los comandos, sino la terminal que se ejecuta en su interior. En una cuenta de usuario creada recientemente en un Mac, esa terminal será zsh.

Si estás usando zsh, debería ser posible listar todos los archivos que no coinciden con el patrón image-*.jpg usando

setopt extended_glob
echo **/^image-*.jpg(.)

** coincide con el directorio de trabajo actual y cualquier subdirectorio, ^ invierte el patrón siguiente, y (.) limita todo el proceso para que coincida solo con archivos ordinarios (y no, por ejemplo, directorios). Para más detalles, consulta la sección de Generación de Nombres de Archivo del manual de zsh, o ejecuta man zshexpn.

Si la lista parece correcta, entonces vuelve a ejecutar el segundo comando pero con rm en lugar de echo.

ADVERTENCIA 1: Es fácil cometer errores con estas cosas, y no puedo prometer que no te haya dado accidentalmente un comando que borre algo que no pretendías. Por favor, revisa cuidadosamente la salida del comando echo. Hacer una copia de seguridad, como sugiere otra respuesta, tampoco es una mala idea.

ADVERTENCIA 2: Si hay demasiados archivos, esto excederá el tamaño máximo permitido del comando y fallará. En ese caso, la solución de find dada en otra respuesta probablemente sea la mejor opción.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X