VirtualBox共享目录软链接临时移除及find输出格式化求助
解决VirtualBox共享目录循环软链接的恢复脚本生成问题
方法一:用find的-printf直接生成可执行恢复脚本
直接通过find的格式化输出参数,一步生成正确的ln -s命令,无需处理换行:
find ~/_D -type l -printf 'ln -s "%l" "%p"\n' > restore_symlinks.sh
参数说明:
-type l:仅匹配软链接文件%l:输出软链接指向的目标路径%p:输出当前软链接的完整路径- 双引号包裹路径,避免含空格、特殊字符的路径出错
\n:每条恢复命令单独成行,生成的脚本可直接执行
方法二:修复已有错误格式的输出文件
如果已经生成了交替换行的软链接路径和目标路径文件(比如temp_links.txt),用sed合并行后生成正确命令:
sed 'N;s/\n/ /' temp_links.txt | awk '{print "ln -s \""$2"\" \""$1"\""}' > restore_symlinks.sh
解释:
sed 'N;s/\n/ /':将相邻两行合并为一行,用空格分隔路径awk:拆分合并后的行,拼接成标准的ln -s命令格式
方法三:用-print0处理含特殊字符的路径
如果路径中包含换行符等极端特殊字符,用空字符分隔避免解析错误:
find ~/_D -type l -print0 | xargs -0 -I {} sh -c 'echo "ln -s \"$(readlink {})\" \"{}\""' > restore_symlinks.sh
参数说明:
-print0:让find用空字符分隔结果,规避特殊字符干扰xargs -0:对应空字符分隔的输入方式,确保路径完整
现成工具替代方案
用rsync直接备份/恢复软链接结构,无需手动编写脚本:
- 备份软链接:
rsync -av --include='*/' --include='*.lnk' --exclude='*' ~/_D/ symlinks_backup/
- 恢复软链接:
rsync -av symlinks_backup/ ~/_D/
rsync会自动识别并重建软链接,无需额外处理格式问题
内容的提问来源于stack exchange,提问作者Tsepati
相关产品推荐
相关产品推荐

