recursion地用实际文件(gnu)replace所有链接

为了在Linux文件上运行代码dx,我需要用实际的文件replace所有的链接。 多年来一直没有在Linux工作,并被术语弄糊涂了。 一直在寻找两天的答案。 有这个简单的脚本吗? 我有2500万行代码。

原始目录:afile bfile clink_to_cfile_in_another_dir(可能遍历多个链接)

期望的最终结果:afile bfile cfile

我已经得到了这一点,但它不工作:

find . -type l -exec "echo 'replacing {}'; cp -LR '{}' '{}'.deref rm '{}' \;" 

有几个问题

  • \; 需要在引号之外,这是exec的一个单独的论点
  • 你错过了一个; 在最后的rm命令之前
  • exec将尝试将整个命令作为一个命令运行。

要运行这样的多个命令,你可以执行一个shell并将脚本传递给它

 find . -type l -exec /bin/bash -c "echo 'replacing {}'; cp -LR '{}' '{}.deref' ; rm '{}'" \; 

似乎工作。