You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何复制含绝对符号链接的文件夹并保留其相对目标路径

复制文件夹并将绝对符号链接转换为同目录相对链接

要实现把/usr/lib/x86_64-linux-gnu/wxcrafter文件夹复制到codeblocks路径下,同时将原有的绝对符号链接转为指向同目录目标文件的相对链接,这里有两种可靠的方法:

方法一:使用symlinks工具(推荐,简洁高效)

这个工具专门用于整理符号链接,能一键把绝对链接转为相对链接,步骤如下:

  1. 首先安装symlinks(如果还没装的话):
sudo apt update && sudo apt install symlinks
  1. 完整复制源文件夹,保留所有符号链接(不跟随链接复制文件):
sudo cp -a /usr/lib/x86_64-linux-gnu/wxcrafter /usr/lib/x86_64-linux-gnu/codeblocks

这里的-a参数是归档模式,会保留权限、所有者、符号链接等所有属性,相当于-dR --preserve=all

  1. 进入目标目录,转换所有绝对符号链接为相对链接:
cd /usr/lib/x86_64-linux-gnu/codeblocks
sudo symlinks -cr .
  • -c:将绝对路径的符号链接转换为相对路径
  • -r:递归处理子目录(如果你的文件夹有子目录的话)

执行完后,检查一下链接是否正确:

ls -l /usr/lib/x86_64-linux-gnu/codeblocks

你会看到lib1.so.0 -> ./lib1.so.0.0.0这样的相对链接,正是你需要的效果。

方法二:手动批量修改链接(无需额外安装工具)

如果不想安装新工具,可以用find结合shell脚本批量修改链接目标:

  1. 先复制文件夹(和方法一的步骤2一样):
sudo cp -a /usr/lib/x86_64-linux-gnu/wxcrafter /usr/lib/x86_64-linux-gnu/codeblocks
  1. 运行以下脚本,遍历并修改所有符合条件的符号链接:
sudo find /usr/lib/x86_64-linux-gnu/codeblocks -type l | while read -r link; do
    # 获取链接的原始目标
    target=$(readlink "$link")
    # 检查目标是否指向原wxcrafter目录下的文件
    if [[ "$target" == /usr/lib/x86_64-linux-gnu/wxcrafter/* ]]; then
        # 提取目标文件的文件名(去掉目录前缀)
        new_target=$(basename "$target")
        # 重新创建相对路径的符号链接
        ln -sf "$new_target" "$link"
    fi
done

这个脚本会自动识别所有指向原wxcrafter目录的绝对链接,将它们改为指向同目录下的对应文件,完全符合你的需求。

内容的提问来源于stack exchange,提问作者user3254720

火山引擎 最新活动