在Linux中,最简单的方法是如何“复制”目录结构以创建一个新的目录层次结构,而所有“文件”只是符号链接,指向源目录上的实际文件?
cp -s
不支持递归操作。
我刚在Linux系统上进行了一个快速测试,cp -sR /orig /dest
正是你所描述的:创建一个包含非目录符号链接指向原始文件的目录层次结构。
cp -sR /orig /dest && symlinks -rc /dest
。 - Nathan S. Watson-Haighcp: illegal option -- s
的错误提示,因此如果您需要编写一个可移植的脚本,您需要采用另一种方法。 - user1985657cp -as /root/absolute/path/name dest_dir
会做你想要的事。请注意,源名称必须是绝对路径,不能是相对路径。否则,您将收到此错误:“xyz-file:仅在当前目录中创建相对符号链接。”
此外,请注意复制的内容:如果dest_dir已经存在,则需要执行类似以下操作:
cp -as /root/absolute/path/name/* dest_dir/
cp -as /root/absolute/path/name/.* dest_dir/
从原目录和新目录上方开始,我认为下面这对find(1)
命令将满足您的需求:
find original -type d -exec mkdir new/{} \;
find original -type f -exec ln -s {} new/{} \;
第一个实例通过在原始树中仅查找目录并在新树中重新创建它们来设置目录结构。第二个实例将符号链接创建到新树中的原始文件。
(cd origParentDir; find origDir ..; find origDir ..)
。使用括号来启动()子shell
,因为在子shell中运行cd仅会临时设置CWD;当子shell退出时,CWD将被恢复。例如,如果您要将“/src/binutils-2.24”克隆到${HOME}/source
,则不希望创建“src
”文件夹。 - user1985657ln
没有递归选项... 就像 ln -s -R orig/dir dest/dir
。 - jiggunjer如果你想动手尝试一下,这里有一个技巧可以自动创建目标文件夹、子文件夹并递归地建立所有符号链接。
在你想要建立符号链接和子文件夹的文件夹中:
创建一个名为 shell.sh 的文件:
nano shell.sh
#!/bin/bash
export DESTINATION=/your/destination/folder/
export TARGET=/your/target/folder/
find . -type d -print0 | xargs -0 bash -c 'for DIR in "$@";
do
echo "${DESTINATION}${DIR}"
mkdir -p "${DESTINATION}${DIR}"
done' -
find . -type f -print0 | xargs -0 bash -c 'for file in "$@";
do
ln -s "${TARGET}${file}" "${DESTINATION}${file}"
done' -
ctrl+O
ctrl+X
使脚本可执行 chmod 777 shell.sh
运行脚本 ./shell.sh
祝你愉快的黑客之旅!