bash - 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'
谢谢你能给我的任何帮助
解决方案
我现在解决的脚本是:
#!/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
推荐阅读
- python - 单击 QDockWidget 的选项卡时的通知?
- ios - 将纬度和经度放在 mapView 上
- ios - Apple 拒绝应用程序:5.2.2 法律、知识产权 - 第三方网站/服务
- javascript - 在 React 中将 Object 转换为 JSON 并下载为 .json 文件
- python - Python意外行为..同时附加到列表类属性
- php - php会话我的帖子变量
- ansible - Ansible:分层应用角色模板
- redis - 如何减慢启动redis获取Loading:1的过程?
- docker - Docker Splunk 日志记录驱动程序 - Splunk 的日志有时会延迟
- html - 角 -没有继承父 div 宽度