Script Bash para crear enlaces simbólicos

Soy relativamente nuevo en bash y estoy teniendo problemas con un script que estoy tratando de escribir. Después de pasar la última hora investigando e intentando nuevas técnicas, todavía no puedo hacer lo que me gustaría.

Mi objective es este: tengo una carpeta /Volumes/Server\ RAID/Photos donde guardo todas mis imágenes. Cada carpeta se titula YYYY-MM FolderName donde a veces hay espacios en FolderName . Dentro de estas carpetas hay tres carpetas: Raw , Edited y Final . Mi objective es, con un único script bash, crear enlaces simbólicos en mi Escritorio para cada carpeta Final Y cambiarle el nombre a su carpeta principal. Ejemplo: Me gustaría /Volumes/Server\ RAID/Photos/2016-10\ Fleet\ Week/Final tener un enlace simbólico en el escritorio llamado 2016-10 Fleet Week .

He probado muchas variedades diferentes del código que he publicado a continuación, pero el código que he incluido es el más conciso (aunque no funcionó).

Descripción del código:

  1. cd to Desktop para que se creen enlaces simbólicos allí
  2. utilizar para el bucle para recorrer las carpetas
  3. crear enlace simbólico – aquí está el problema: necesito include el nombre de la carpeta en la ruta del file de alguna manera, pero también agregar \ antes de los espacios para que el command no falle. SIN EMBARGO, he estado recibiendo posts de error que dicen que no hay un lugar llamado RAID/Photos que me haga pensar que el script se tropieza con el primer espacio, incluso con la barra invertida.
  4. Cambiar el nombre del enlace simbólico Final al nombre de la carpeta. (Supuse que no necesitaba directorys completos aquí porque ya estoy en el escritorio

     cd Desktop for f in /Volumes/Server\ RAID/Photos; do ln -s /Volumes/Server\ RAID/Photos/"$f"/Final mv Final $f done 

PREGUNTA: ¿Alguien puede ayudarme a resolver este guión? (Principalmente me interesa la tercera parte, pero no diría que no para ayudar con el rest).

  • Los enlaces simbólicos se rompieron con vmhgfs en la fusión
  • Intentando get un enlace simbólico, pero se convierte en un alias
  • Enlace simbólico a la carpeta de Dropbox en diferentes counts de usuario
  • ¿Por qué se eliminan los accesos directos del Finder a Ext HDD cuando no está conectado? ¿Soluciones provisionales?
  • Emacs no se reinicia automáticamente después de reiniciar?
  • Dificultad para configurar 'Abrir con aplicación' a un alias
  • Los icons del enlace simbólico no se actualizan
  • ¿Puedo eliminar las carpetas del directory de inicio del usuario?
  • One Solution collect form web for “Script Bash para crear enlaces simbólicos”

    Cuando tenga problemas con las cotizaciones de shell, siempre será útil agregar declaraciones de echo en lugares adecuados en su secuencia de commands para ver qué está sucediendo.

    Miremos esta línea por línea:

     for f in /Volumes/Server\ RAID/Photos; 

    Esto solo se ejecuta una vez y establece f en Volumes/Server RAID/Photos , que probablemente no sea lo que usted desea.

     do ln -s /Volumes/Server\ RAID/Photos/"$f"/Final 

    f se establece en la ruta completa (ver arriba), por lo que se expande a

     ln -s /Volumes/Server\ RAID/Photos//Volumes/Server\ RAID/Photos/Final 

    que (nuevamente) no es lo que quieres ver aquí.

     mv Final $f 

    Véase más arriba 🙂

    Hay varias forms de abordar esto, pero en tu caso, me gustaría algo como lo siguiente (para evitar el reto de tener que extraer el nombre del directory de la ruta de origen)

     cd /Volumes/Server\ RAID/Photos/ for f in *; do if [ -d "$f" ]; then if [ -d "$f"/Final ]; then ln -s "/Volumes/Server RAID/Photos/$f/Final" ~/Desktop/"$f" fi fi done 

    Los dos if s cubren los casos en que hay files en el directory de origen o falta el directory Final .

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).