恢复 .bak 文件

6

我运行了一个使用 Perl 的脚本

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

这将创建每个文件的副本,如下所示:
script.sh
script.sh.bak

我现在想从.bak文件中进行恢复。我该如何轻松地执行此操作?

3个回答

7
for file in *.sh.bak dir/*.sh.bak; do cp "$file" "${file//.bak}"; done

您也可以使用mv而不是cp


Op De Cirkel:你为什么说这行不通呢?我相信 shell 可以处理任意数量的文件作为通配符扩展的结果;只有当你尝试将长列表传递给另一个进程时,ARG_MAX 才会成为问题。 - tripleee
1
@OpDeCirkel:ARG_MAX不适用于shell内置命令 - Dennis Williamson
@tripleee:你是正确的。请参阅我对Op De Cirkel的评论。 - Dennis Williamson
@Dennis Williamson 您是对的,ARG_MAX 不适用于内置命令... 很好知道。 - Op De Cirkel

2

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

这段命令可以在当前目录下查找以 .bak 结尾的文件,并将其复制一份,去掉原文件名后缀中的 .bak。

2
如果文件名包含换行符,则这种方法将无法正常工作。 - Dennis Williamson

0

谢谢您的修复。

我一直在使用下面的代码组合来修复 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 %


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接