Linux上“复制”目录层次结构的最简单方法是什么,以便创建新的目录层次结构,而所有“文件”只是指向源层次结构上的实际文件的符号链接?
cp -s
递归不起作用。
答案 0 :(得分:29)
我刚刚对linux框进行了快速测试,而cp -sR /orig /dest
完全按照您的描述进行:创建一个目录层次结构,其中非目录的符号链接返回到原始文件。
答案 1 :(得分:13)
cp -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/
答案 2 :(得分:11)
从原始&以上开始新目录,我认为这对find(1)
命令将满足您的需求:
find original -type d -exec mkdir new/{} \;
find original -type f -exec ln -s {} new/{} \;
第一个实例通过仅查找原始树中的目录并在新树中重新创建它们来设置目录结构。第二个创建新树中原始文件的符号链接。
答案 3 :(得分:7)
还有“lndir”实用程序(来自X)做了这样的事情;我在这里提到它:Debian Bug report #301030: can we move lndir to coreutils or debianutils?,我现在很高兴使用它。
答案 4 :(得分:1)
答案 5 :(得分:1)
如果你想弄脏你的手 这是一个技巧,可以递归地自动创建所有文件的目标文件夹,子文件夹和符号链接。
在要符号链接的文件和子文件夹所在的文件夹中:
创建一个文件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
快乐的黑客攻击!
答案 6 :(得分:0)