bash: 自动将文件夹从其他驱动器挂载到主目录
bash: automate mounting folders to home from other drive
我想使用一个脚本从外部驱动器自动挂载我的个人文件夹。我的系统是 Ubuntu 16.04.
我想检查外部目录中是否存在与HOME中文件夹同名的文件夹,然后将HOME中的文件夹重命名为foldername_local并将外部目录文件夹挂载到HOME中。
这是我在 google 和 Whosebug 的帮助下取得的进展:
REMOTE=/path/to/remote/location
#create a list of external folders
rLIST=$(find $REMOTE -maxdepth 1 -type d -name [^\.]\* -printf '%f\n'| sed 's:^\./::')
#create a list of folders in HOME
hLIST=$(find $HOME -maxdepth 1 -type d -name [^\.]\* -printf '%f\n'| sed 's:^\./::')
#declare comparison function
contains() {
[[ =~ (^|[[:space:]])($|[[:space:]]) ]] && exit(0) || exit(1)
}
for item in "$rLIST"; do
if contains hLIST item
then
#rename folder and mount external drive fodlers
mv $HOME$item $HOME$item_local
mount --bind $REMOTE$item $HOME$item
else
continue
fi
done
到目前为止创建文件夹名称列表有效。
不幸的是,比较部分不起作用,我被卡住了。
我很感激任何关于如何解决这个问题的想法。
来源:
How do I check if a variable exists in a list in BASH
Listing only directories in UNIX
for item in /path/to/remote/location/*; do
dir=${item##*/}
[ -d $item ] && [ -d /home/$dir ] && mv /home/$dir /home/${dir}_local && mkdir /home/$dir && mount --bind $item /home/$dir
done
我想使用一个脚本从外部驱动器自动挂载我的个人文件夹。我的系统是 Ubuntu 16.04.
我想检查外部目录中是否存在与HOME中文件夹同名的文件夹,然后将HOME中的文件夹重命名为foldername_local并将外部目录文件夹挂载到HOME中。
这是我在 google 和 Whosebug 的帮助下取得的进展:
REMOTE=/path/to/remote/location
#create a list of external folders
rLIST=$(find $REMOTE -maxdepth 1 -type d -name [^\.]\* -printf '%f\n'| sed 's:^\./::')
#create a list of folders in HOME
hLIST=$(find $HOME -maxdepth 1 -type d -name [^\.]\* -printf '%f\n'| sed 's:^\./::')
#declare comparison function
contains() {
[[ =~ (^|[[:space:]])($|[[:space:]]) ]] && exit(0) || exit(1)
}
for item in "$rLIST"; do
if contains hLIST item
then
#rename folder and mount external drive fodlers
mv $HOME$item $HOME$item_local
mount --bind $REMOTE$item $HOME$item
else
continue
fi
done
到目前为止创建文件夹名称列表有效。
不幸的是,比较部分不起作用,我被卡住了。
我很感激任何关于如何解决这个问题的想法。
来源:
How do I check if a variable exists in a list in BASH
Listing only directories in UNIX
for item in /path/to/remote/location/*; do
dir=${item##*/}
[ -d $item ] && [ -d /home/$dir ] && mv /home/$dir /home/${dir}_local && mkdir /home/$dir && mount --bind $item /home/$dir
done