linux shell脚本复制目录树和链接文件

标签 linux shell hyperlink directory

我希望能够创建目录树的副本并软链接(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

但它有两个问题:

  1. 我想从起点复制到目的地,它从起点复制到 /home/user/destination/home/user/origin 。这不是什么大事,因为我可以稍后移动它
  2. 如果文件名类似于

    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/

相关文章:

javascript - 在javascript中添加图像链接

linux - 运行 SOLR 应用程序时出错

linux - 'Git : gpg failed to sign the data' in visual studio code

Linux:尝试通过 ioctl 获取操纵杆供应商和产品 ID,改为获取 EINVAL

windows - 相当于 Windows 中的 Unix eval

mysql - 如何在 debian 中安装 mysql-server :buster using script without being asked any configuration questions?

linux - 在 Bash/Shell 脚本中使用 BuildTools 下载/构建 Minecraft 服务器 jar

html - 在 Accordion 标题中插入指向内部页面的链接

JQuery标签单击并选择所有复选框问题

linux - vmlinuz 进程在 100% CPU 上运行