【问题标题】:Restore .bak files恢复 .bak 文件
【发布时间】:2012-05-29 07:31:16
【问题描述】:

我运行了一个 perl 脚本,使用

perl -p -i.bak -e "..." *.sh dir/*.sh

这创建了每个文件的副本,例如

script.sh
script.sh.bak

我现在想从 .bak 文件中恢复。我怎样才能轻松做到这一点?

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:
    for file in *.sh.bak dir/*.sh.bak; do cp "$file" "${file//.bak}"; done
    

    或者您可以使用mv 代替cp

    【讨论】:

    • Op De Cirkel:为什么你说它行不通?我相信由于通配符扩展,shell 可以处理任意数量的文件;当你试图将一个长列表传递给另一个进程时,ARG_MAX 可能会咬你。
    • @tripleee:你是对的。请参阅上面我对 Op De Cirkel 的评论。
    • @Dennis Williamson 你说得对,ARG_MAX 不适用于内置插件......很高兴知道
    【解决方案2】:

    find -name '*.bak'|sed 's:.bak$::'|xargs -n 1 -I % cp %.bak %

    【讨论】:

    • 如果您的文件名包含换行符,这将不起作用。
    【解决方案3】:

    感谢您的修复。

    我一直在使用下面的代码组合来修复 Joomla 网站中的“eval(base64_decode”)。

    发现: grep -lr --include=*.php "eval(base64_decode" ./

    删除: grep -lr --include=.php "eval(base64_decode" ./ | xargs sed -i.bak 's/eval(base64_decode[^;];/\n/g'

    撤消: find -name '*.bak'|sed 's:.bak$::'|xargs -n 1 -I % cp %.bak %

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多