我希望能够创建目录树的副本并软链接(soft link)其上的文件。
例如,来自
/home/user/origin/a/sub/file.txt
我想得到
/home/user/destination/a/sub/file.txt
这是一个指向原始 file.txt 的链接。
我测试过
find /home/user/origin/ -type d -printf "mkdir -vp '/home/user/destination%p'\n" -o -type f -printf "ln -vs '%p' '/home/user/destination%p'\n" | sh
但它有两个问题:
- 我想从起点复制到目的地,它从起点复制到
/home/user/destination/home/user/origin
。这不是什么大事,因为我可以稍后移动它 - 如果文件名类似于
In Fifty Years We'll All Be Chicks.txt
最佳答案
假设我明白你想要做什么,那么使用 -exec
似乎更容易
find /home/user/origin/ \
-type d -exec sh -c 'mkdir -v "/home/user/destination/${0#/home/user/origin/}"' {} \; \
-o \
-type f -exec sh -c 'ln -vs "$0" "/home/user/destination/${0#/home/user/origin/}"' {} \;
注意 -or
的优先级低于隐含的 -and
在这里很重要。
关于linux shell脚本复制目录树和链接文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718782/