首页 > 解决方案 > Bash Script - 如何嵌套循环进入目录使符号链接从该目录退出并转到下一个并执行相同操作?

问题描述

我是 GNU/Linux 用户,而且我经常使用“Wine”和“PlayOnLinux”,但我更喜欢制作符号链接来移动“Windows”的“路径”,让我更轻松地备份程序数据。

我编写了以下脚本(有西班牙语变量名称,因为我来自委内瑞拉,西班牙语是我的母语):

脚本内容:

#!/usr/bin/env bash

echo '
Autor ----------------> Inukaze ( Venezuela )
Sitio ----------------> Removed for can publish the question
Correo-E -------------> bloginukaze@gmail.com
Licencia -------------> GPL 2

******* Inicio : Acerca de este guión ******** 

    Es un simple guion para cambiar la
    Ubicacion de los directorios 
    predeterminados

******** Fin : Acerca de este guión **********'

Prefijo="$HOME/.wine"
Objetivo="drive_c/users/inukaze"
BaseDeEnlace="/media/Compartido/Videojuegos/Partidas/Wine/inukaze"

#Crear Carpetas para la BaseDeEnlace en caso de que no exista:
if test ! -d "$BaseDeEnlace/AppData"
then
    mkdir -p "$BaseDeEnlace/AppData" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Application Data"
then
    mkdir -p "$BaseDeEnlace/Application Data" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Cookies"
then
    mkdir -p "$BaseDeEnlace/Cookies" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Descargas"
then
    mkdir -p "$BaseDeEnlace/Descargas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Documentos"
then
    mkdir -p "$BaseDeEnlace/Documentos" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Escritorio"
then
    mkdir -p "$BaseDeEnlace/Escritorio" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Imagenes"
then
    mkdir -p "$BaseDeEnlace/Imagenes" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Local Settings"
then
    mkdir -p "$BaseDeEnlace/Local Settings" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Musica"
then
    mkdir -p "$BaseDeEnlace/Musica" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Partidas"
then
    mkdir -p "$BaseDeEnlace/Partidas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Plantillas"
then
    mkdir -p "$BaseDeEnlace/Plantillas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Temp"
then
    mkdir -p "$BaseDeEnlace/Temp" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Videos"
then
    mkdir -p "$BaseDeEnlace/Videos" &> /dev/null
fi

#Borrar carpeta anterior :
rm -rf "$Prefijo/$Objetivo/AppData"
rm -rf "$Prefijo/$Objetivo/Application Data"
rm -rf "$Prefijo/$Objetivo/Cookies"
rm -rf "$Prefijo/$Objetivo/Descargas"
rm -rf "$Prefijo/$Objetivo/Documentos"
rm -rf "$Prefijo/$Objetivo/Escritorio"
rm -rf "$Prefijo/$Objetivo/Desktop"
rm -rf "$Prefijo/$Objetivo/Imagenes"
rm -rf "$Prefijo/$Objetivo/Local Settings"
rm -rf "$Prefijo/$Objetivo/Musica"
rm -rf "$Prefijo/$Objetivo/Saved Games"
rm -rf "$Prefijo/$Objetivo/Templates"
rm -rf "$Prefijo/$Objetivo/Temp"
rm -rf "$Prefijo/$Objetivo/Videos"
rm -rf "$Prefijo/$Objetivo/Mi música"
rm -rf "$Prefijo/$Objetivo/Mis Documentos"
rm -rf "$Prefijo/$Objetivo/My Documents"
rm -rf "$Prefijo/$Objetivo/Mis imágenes"
rm -rf "$Prefijo/$Objetivo/Mis vídeos"
rm -rf "$Prefijo/$Objetivo/Downloads"

# Crear Enlaces : 
for Directorio in $(find "$Prefijo" -mindepth 1 -maxdepth 1 -type d) ; do 
cd "$Directorio" && echo "Ingresando en $Directorio" || { echo "Error: No puedo entrar en $Directorio"; continue; }
    for Enlace in $(ln -sf "$BaseDeEnlace/AppData" "$Prefijo/$Objetivo/AppData" ; ln -sf "$BaseDeEnlace/Application Data" "$Prefijo/$Objetivo/Application Data" ; ln -sf "$BaseDeEnlace/Cookies" "$Prefijo/$Objetivo/Cookies" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Descargas" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Documentos" ; ln -sf "$BaseDeEnlace/Escritorio"  "$Prefijo/$Objetivo/Escritorio" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Imagenes" ; ln -sf "$BaseDeEnlace/Local Settings" "$Prefijo/$Objetivo/Local Settings" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Musica" ; ln -sf "$BaseDeEnlace/Partidas" "$Prefijo/$Objetivo/Saved Games" ; ln -sf "$BaseDeEnlace/Plantillas" "$Prefijo/$Objetivo/Templates" ; ln -sf "$BaseDeEnlace/Temp" "$Prefijo/$Objetivo/Temp" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Videos" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Mi música" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Mis Documentos" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Mis imágenes" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Mis vídeos" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Descargas" ; ln -sf "$BaseDeEnlace/Escritorio" "$Prefijo/$Objetivo/Desktop" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/My Documents")
    do
        echo ${Enlace}
    done
done

# Prefijo de "PlayOnLinux"
Prefijo="$HOME/.PlayOnLinux/wineprefix/"
Objetivo="drive_c/users/inukaze/"
BaseDeEnlace="/media/Compartido/Videojuegos/Partidas/Wine/inukaze"

#Borrar carpeta anterior :
rm -rf "$Prefijo/$Objetivo/AppData"
rm -rf "$Prefijo/$Objetivo/Application Data"
rm -rf "$Prefijo/$Objetivo/Cookies"
rm -rf "$Prefijo/$Objetivo/Descargas"
rm -rf "$Prefijo/$Objetivo/Documentos"
rm -rf "$Prefijo/$Objetivo/Escritorio"
rm -rf "$Prefijo/$Objetivo/Imagenes"
rm -rf "$Prefijo/$Objetivo/Local Settings"
rm -rf "$Prefijo/$Objetivo/Musica"
rm -rf "$Prefijo/$Objetivo/Saved Games"
rm -rf "$Prefijo/$Objetivo/Templates"
rm -rf "$Prefijo/$Objetivo/Temp"
rm -rf "$Prefijo/$Objetivo/Videos"
rm -rf "$Prefijo/$Objetivo/Mi música"
rm -rf "$Prefijo/$Objetivo/Mis Documentos"
rm -rf "$Prefijo/$Objetivo/Mis imágenes"
rm -rf "$Prefijo/$Objetivo/Mis vídeos"
rm -rf "$Prefijo/$Objetivo/Downloads"

# Crear Enlaces : 
for Directorio in $(find "$Prefijo" -mindepth 1 -maxdepth 1 -type d) ; do 
cd "$Directorio" && echo "Ingresando en $Directorio" || { echo "Error: No puedo entrar en $Directorio"; continue; }
    for Enlace in $(ln -sf "$BaseDeEnlace/AppData" "$Prefijo/$Objetivo/AppData" ; ln -sf "$BaseDeEnlace/Application Data" "$Prefijo/$Objetivo/Application Data" ; ln -sf "$BaseDeEnlace/Cookies" "$Prefijo/$Objetivo/Cookies" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Descargas" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Documentos" ; ln -sf "$BaseDeEnlace/Escritorio"  "$Prefijo/$Objetivo/Escritorio" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Imagenes" ; ln -sf "$BaseDeEnlace/Local Settings" "$Prefijo/$Objetivo/Local Settings" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Musica" ; ln -sf "$BaseDeEnlace/Partidas" "$Prefijo/$Objetivo/Saved Games" ; ln -sf "$BaseDeEnlace/Plantillas" "$Prefijo/$Objetivo/Templates" ; ln -sf "$BaseDeEnlace/Temp" "$Prefijo/$Objetivo/Temp" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Videos" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Mi música" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Mis Documentos" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Mis imágenes" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Mis vídeos" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Descargas" ; ln -sf "$BaseDeEnlace/Escritorio" "$Prefijo/$Objetivo/Desktop" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/My Documents")
    do
        echo ${Enlace}
    done
done

问题是我遇到了第二个前缀的错误,PlayOnLinux 文件夹前缀如下:

ln: failed to created symbolic link to '/home/inukaze/.PlayOnLinux/wineprefix//drive_c/users/inukaze//My Documents' : Does not exist the file or directory

我需要采取什么完整的路径?因为我注意到'wineprefix/ “现有文件夹的名称是空的” /drive_c'

谢谢你能给我的任何帮助

标签: bashpath

解决方案


我现在解决的脚本是:

#!/usr/bin/env bash

echo '
Autor ----------------> Inukaze ( Venezuela )
Sitio ----------------> Removed for can publish the question
Correo-E -------------> bloginukaze@gmail.com
Licencia -------------> GPL 2

******* Inicio : Acerca de este guión ******** 

    Es un simple guion para cambiar la
    Ubicacion de los directorios 
    predeterminados

******** Fin : Acerca de este guión **********'

Objetivo="drive_c/users/inukaze"
BaseDeEnlace="/media/Compartido/Videojuegos/Partidas/Wine/inukaze"

#Crear Carpetas para la BaseDeEnlace en caso de que no exista:
if test ! -d "$BaseDeEnlace/AppData"
then
    mkdir -p "$BaseDeEnlace/AppData" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Application Data"
then
    mkdir -p "$BaseDeEnlace/Application Data" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Cookies"
then
    mkdir -p "$BaseDeEnlace/Cookies" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Descargas"
then
    mkdir -p "$BaseDeEnlace/Descargas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Documentos"
then
    mkdir -p "$BaseDeEnlace/Documentos" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Escritorio"
then
    mkdir -p "$BaseDeEnlace/Escritorio" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Imagenes"
then
    mkdir -p "$BaseDeEnlace/Imagenes" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Local Settings"
then
    mkdir -p "$BaseDeEnlace/Local Settings" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Musica"
then
    mkdir -p "$BaseDeEnlace/Musica" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Partidas"
then
    mkdir -p "$BaseDeEnlace/Partidas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Plantillas"
then
    mkdir -p "$BaseDeEnlace/Plantillas" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Temp"
then
    mkdir -p "$BaseDeEnlace/Temp" &> /dev/null
fi

if test ! -d "$BaseDeEnlace/Videos"
then
    mkdir -p "$BaseDeEnlace/Videos" &> /dev/null
fi

# Borrar Carpeta Anterior & Crear Enlace : 
Prefijo="$HOME/.wine" ; cd "$Prefijo"
cd "$Prefijo/$Objetivo" && echo "Ingresando en $Prefijo"
    for Enlace in $(rm -rf "$Prefijo/$Objetivo/AppData" ; rm -rf "$Prefijo/$Objetivo/Application Data" ; rm -rf "$Prefijo/$Objetivo/Cookies" ; rm -rf "$Prefijo/$Objetivo/Descargas" ; rm -rf "$Prefijo/$Objetivo/Documentos" ; rm -rf "$Prefijo/$Objetivo/Escritorio" ; rm -rf "$Prefijo/$Objetivo/Desktop" ; rm -rf "$Prefijo/$Objetivo/Imagenes" ; rm -rf "$Prefijo/$Objetivo/Local Settings" ; rm -rf "$Prefijo/$Objetivo/Musica" ; rm -rf "$Prefijo/$Objetivo/Saved Games" ; rm -rf "$Prefijo/$Objetivo/Templates" ; rm -rf "$Prefijo/$Objetivo/Temp" ; rm -rf "$Prefijo/$Objetivo/Videos" ; rm -rf "$Prefijo/$Objetivo/Mi música" ; rm -rf "$Prefijo/$Objetivo/Mis Documentos" ; rm -rf "$Prefijo/$Objetivo/My Documents" ; rm -rf "$Prefijo/$Objetivo/Mis imágenes" ; rm -rf "$Prefijo/$Objetivo/Mis vídeos" ; rm -rf "$Prefijo/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/AppData" "$Prefijo/$Objetivo/AppData" ; ln -sf "$BaseDeEnlace/Application Data" "$Prefijo/$Objetivo/Application Data" ; ln -sf "$BaseDeEnlace/Cookies" "$Prefijo/$Objetivo/Cookies" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Documentos" ; ln -sf "$BaseDeEnlace/Escritorio"  "$Prefijo/$Objetivo/Escritorio" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Imagenes" ; ln -sf "$BaseDeEnlace/Local Settings" "$Prefijo/$Objetivo/Local Settings" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Musica" ; ln -sf "$BaseDeEnlace/Partidas" "$Prefijo/$Objetivo/Saved Games" ; ln -sf "$BaseDeEnlace/Plantillas" "$Prefijo/$Objetivo/Templates" ; ln -sf "$BaseDeEnlace/Temp" "$Prefijo/$Objetivo/Temp" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Videos" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Objetivo/Mi música" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/Mis Documentos" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Objetivo/Mis imágenes" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Objetivo/Mis vídeos" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/Escritorio" "$Prefijo/$Objetivo/Desktop" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Objetivo/My Documents")
    do
        echo ${Enlace}
    done
    
# Prefijo de "PlayOnLinux"
Prefijo="$HOME/.PlayOnLinux/wineprefix"
cd "$Prefijo"
Objetivo="drive_c/users/inukaze"
BaseDeEnlace="/media/Compartido/Videojuegos/Partidas/Wine/inukaze"

# Borrar Carpeta Anterior & Crear Enlace : 
for Directorio in $(ls -l | awk '{print$09}' | sed 's/\/*$//') ; do 
cd "$Prefijo/$Directorio/$Objetivo" && echo "Ingresando en $Prefijo/$Directorio" || { echo "Error: No puedo entrar en $Directorio"; continue; }
    for Enlace in $(rm -rf "$Prefijo/$Directorio/$Objetivo/AppData" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Application Data" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Cookies" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Descargas" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Documentos" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Escritorio" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Desktop" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Imagenes" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Local Settings" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Musica" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Saved Games" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Templates" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Temp" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Videos" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Mi música" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Mis Documentos" ; rm -rf "$Prefijo/$Directorio/$Objetivo/My Documents" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Mis imágenes" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Mis vídeos" ; rm -rf "$Prefijo/$Directorio/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/AppData" "$Prefijo/$Directorio/$Objetivo/AppData" ; ln -sf "$BaseDeEnlace/Application Data" "$Prefijo/$Directorio/$Objetivo/Application Data" ; ln -sf "$BaseDeEnlace/Cookies" "$Prefijo/$Directorio/$Objetivo/Cookies" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Directorio/$Objetivo/Documentos" ; ln -sf "$BaseDeEnlace/Escritorio"  "$Prefijo/$Directorio/$Objetivo/Escritorio" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Directorio/$Objetivo/Imagenes" ; ln -sf "$BaseDeEnlace/Local Settings" "$Prefijo/$Directorio/$Objetivo/Local Settings" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Directorio/$Objetivo/Musica" ; ln -sf "$BaseDeEnlace/Partidas" "$Prefijo/$Directorio/$Objetivo/Saved Games" ; ln -sf "$BaseDeEnlace/Plantillas" "$Prefijo/$Directorio/$Objetivo/Templates" ; ln -sf "$BaseDeEnlace/Temp" "$Prefijo/$Directorio/$Objetivo/Temp" ; ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Directorio/$Objetivo/Videos" ; ln -sf "$BaseDeEnlace/Musica" "$Prefijo/$Directorio/$Objetivo/Mi música" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Directorio/$Objetivo/Mis Documentos" ; ln -sf "$BaseDeEnlace/Imagenes" "$Prefijo/$Directorio/$Objetivo/Mis imágenes" ;  ln -sf "$BaseDeEnlace/Videos" "$Prefijo/$Directorio/$Objetivo/Mis vídeos" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Directorio/$Objetivo/Downloads" ; ln -sf "$BaseDeEnlace/Descargas" "$Prefijo/$Directorio/$Objetivo/Descargas" ; ln -sf "$BaseDeEnlace/Escritorio" "$Prefijo/$Directorio/$Objetivo/Desktop" ; ln -sf "$BaseDeEnlace/Documentos" "$Prefijo/$Directorio/$Objetivo/My Documents")
    do
        echo ${Enlace}
    done
done

推荐阅读