3 votos

Cómo extraer recursivamente los iconos personalizados de las subcarpetas y guardarlos en archivos de imagen

Estoy migrando de MacOS a Linux. He personalizado el icono de muchas de mis subcarpetas en mi carpeta "Documentos". He aprendido a hacer lo mismo en Linux, utilizando archivos de imagen, y ahora me gustaría transportar todos mis iconos personalizados a mi nuevo sistema.

Como el número es bastante elevado, me gustaría automatizar este proceso: copiar recursivamente el icono personalizado de todas las subcarpetas, y guardar cada una de ellas en un archivo de imagen independiente (¿formato .png?).

Tal vez esto se podría hacer con un Automator script, pero no soy experto en eso.

0 votos

¿Cuál es el sufijo (.???) de estos archivos?

1 votos

Si ha cambiado estos iconos utilizando la función de Finder Infórmate las imágenes estarán en la bifurcación de recursos (atributo extendido) de un archivo invisible en la carpeta root. Probablemente sería más fácil simplemente copiar las imágenes originales.

1 votos

@red_menace Por curiosidad, ¿no debería afectar al kMDItemFSHasCustomIcon para la carpeta? Me sale (null) . ¿O no están relacionados? También obtener el mismo con un archivo al pegar una imagen en el icono Obtener información así.

1voto

user3439894 Puntos 5883

El ejemplo shell script código que se muestra a continuación, lo que se probó en MacOS Catalina guardado como shell script y ejecutado en Terminal .

Hace uso de la utilidad de terceros fileicon que es un shell script que utilizan todos los nativos MacOS para extraer los iconos del carpetas que tienen un icono personalizado. Utilicé las instrucciones de instalación manual en la página web enlazada.

El ejemplo shell script código crea un trabajo carpeta dentro del Documentos carpeta con la convención de nomenclatura de, por ejemplo, Documentos Carpetas Imágenes - 1632963703 donde, por ejemplo 1632963703 son los segundos transcurridos desde época . Dentro de este carpeta , a estructura jerárquica de carpetas se crea en el nombre de ruta calificado para cada carpeta de la Documentos carpeta que tiene un icono personalizado, donde un .icns archivo se crea como la imagen extraída y un .png archivo creado a partir de él. El archivos/carpetas se denominan según el nombre de la carpeta con el icono personalizado. De esta manera no tendrás problemas para saber a dónde van una vez que se mueven a Linux .

Para utilizar el ejemplo shell script código , en Terminal , ejecute lo siguiente comando compuesto :

f='extracticons'; touch "$f"; open -e "$f"; chmod +x "$f"

Copiar y pegar el ejemplo shell script código que se muestra a continuación, en el extracciones documento y luego guárdalo.

A continuación, debe mover el extracticons shell script a un directorio situado dentro del de la cáscara PATH .

Lo he trasladado a /usr/local/bin Por ejemplo,..:

sudo mv -v extracticons /usr/local/bin/

Ahora está listo para su uso, sólo tienes que escribir extracticons y pulse entrar en .


Ejemplo shell script código :

#!/bin/zsh

doc_dir="$HOME/Documents"
icns_dir="${doc_dir}/Documents Folders Images - $(date +%s)"

while IFS= read -r line; do
    [[ "${line}" =~ ($HOME/)(Documents/.*)(/Icon) ]] || continue
    mkdir -p "${icns_dir}/${match[2]}"
    cd "${icns_dir}/${match[2]}" || exit
    printf '%s\n' 'Creating .icns file...'
    fileicon get "${match[1]}${match[2]}"
done < <(find "${doc_dir}" -type f -name 'Icon?' -print)

while IFS= read -r line; do
    dir_path="${line%/*}"
    file_name="${line##*/}"
    cd "${dir_path}" || exit
    printf '%s\n' 'Creating .png file...'
    sips -s format png "${file_name}" --out "${file_name%.*}.png"
done < <(find "${icns_dir}" -type f -name '*.icns' -print)

cd "${icns_dir}" || exit
printf '%s\n' 'Creating Zip Archive...'
zip -r 'DocumentsFoldersIcons.zip' 'Documents'
printf '%s\n' "Deleting ${icns_dir}/Documents"
rm -r "${icns_dir}/Documents"

Notas:

El último bloque de código en el ejemplo shell script código crea un archivo zip archivo de la estructura jerárquica de carpetas y luego se limpia borrando el estructura jerárquica de carpetas dejando un archivo llamado DocumentosCarpetasIconos.zip que contiene todos los iconos creados con su caminos recursiva. Siempre se puede comentar o eliminar el rm comando si quieres.

Esta respuesta sólo cubre la extracción de iconos personalizados y la creación de un .png archivo de la .icns archivo . Asignación de los iconos a carpetas en Linux está fuera del alcance de preguntas apropiadas para Pregunta diferente . Publicar una pregunta en Pregúntale a Ubuntu o Súper Usuario sería más apropiado para el Linux de las cosas.

Sin embargo, una vez que haya extraído el DocumentosCarpetasIconos.zip archivos en el Linux sistema, si necesita diferentes tamaños de la imagen distintos del extraído por sips puede utilizar icns2png para extraer todos los iconos del .icns archivos a los distintos tamaños dentro haciendo lo siguiente en un Terminal :

cd '/path/to/extracted/Documents'
find . -type f -name '*.icns' -execdir sh -c 'icns2png -x "$1"' sh {} \;

Tenga en cuenta que esto supone icns2png se ha instalado.

Luego, en cada carpeta encontrará, por ejemplo,:

Foldername.icns
Foldername.png
Foldername_16x16x32.png
Foldername_32x32x32.png
Foldername_48x48x32.png
Foldername_128x128x32.png
Foldername_256x256x32.png
Foldername_512x512x32.png

El ejemplo shell script código se probó en Terminal en MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .

  • 1 Asume los ajustes necesarios y apropiados en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

El <em>ejemplo </em><strong>shell script </strong><em>código </em>es sólo eso, un ejemplo, y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Es responsabilidad del usuario asegurarse de que el <em>script </em>si son aptos para su uso.

1 votos

¡Es brillante! Lo probaré lo antes posible.

1 votos

¡Funciona de maravilla! ¡Gracias!

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