我有一个目录,folder1
,我已通过 samba 共享。我还有另一个目录,folder2
,它未共享,但包含许多我想共享的子文件夹。当用户连接到我的共享时,folder1
我希望他们也能看到 中的子目录folder2
。
目前我实现此操作的方式是在 gnome 中打开folder2
,右键单击那里的目录,然后选择Make Links
。然后我获取符号链接并手动将其剪切并粘贴到folder1
。
我希望当我在 中创建新目录时folder2
,在 中创建一个指向该目录的符号链接folder1
。我该怎么做?我使用的是 Ubuntu 14.04
答案1
可能有自动化的方法来做到这一点,但只需编写几个 shell 脚本可能是解决这个问题的最简单方法。
首先,不要只在 folder2 中创建一个新的子目录,而是使用一个同时创建符号链接的脚本来执行此操作。以下未经测试一旦你填写了目录的真实路径,脚本就会执行该操作。核心脚本非常简单,但我添加了一些错误处理,以便它在现实世界中有机会。
#!/bin/bash
## create subdirectory and symbolic link
## Usage: script-name <name of new subdirectory to create and link>
PRIVATE="path to private directory" ## Put real path here
SHARED="path to shared directory" ## Put real path here
cd "${PRIVATE}"
if [ -z "${1}" ]
then
echo "Aborting - no new directory name specified"
exit 1
fi
if [ -e "${1}" ]
then
echo "Aborting - file or directory with that name already exists"
exit 1
fi
mkdir "${1}"
RC=$?
if ((RC))
then
echo "Aborting - Failed to create new private subdirectory named [${1}] in [${PRIVATE}] with error code [${RC}]"
exit ${RC}
fi
cd "${SHARED}"
ln -s "${PRIVATE}/${1}" .
RC=$?
if ((RC))
then
echo "Aborting - Failed to create new symlink named [${1}] in [${SHARED}] with error code [${RC}]"
exit ${RC}
fi
exit 0
其他问题:
如果您需要从 GUI 而不是命令行访问它,只需添加一小段代码,调用 yad 创建一个对话框,询问要创建的目录的名称,然后在菜单系统中为您的脚本创建一个条目,也可以在桌面或面板上创建条目。这样做很简单,但超出了这个问题的范围。
类似地,如果其他东西在文件夹 1 中创建了新的子目录,您可以编写一个脚本,扫描文件夹 1 中的新子目录,然后将它们符号链接到文件夹 2。
您可以手动运行它,或者在循环内运行它,让它完成工作,休眠一段时间,然后再次运行。
此“守护进程”脚本可以手动启动,也可以从 .login 脚本运行,这样每次登录时它都会启动。如果您确保它创建的任何子目录和链接都具有所需的所有者、组和权限,它也可以从 cron 启动。(您可能不希望它们由 root 拥有,而 root 是 cron 在其下运行的用户。)
这完全取决于您的具体要求。
如果文件夹 1 或文件夹 2 需要提升写入权限,那么您的脚本将需要使用这些权限运行,或者使用 sudo 或两个权限来处理该问题,并且可能还需要在 sudoers 中输入一个条目,这样它就不必每次都要求您输入密码。然后,出于安全原因,脚本本身必须具有安全的所有者和受限的权限,并保存在也需要提升写入权限的目录中。
您可能还需要考虑从文件夹 1 中删除子目录的情况。然后,您可能希望从文件夹 2 中删除损坏的符号链接。方法/代码与上面的非常相似。