2012-05-29 84 views
4

我跑使用恢復.bak文件

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

一個Perl腳本,此創建的每個文件的副本一樣

script.sh 
script.sh.bak 

我現在想從.bak文件恢復。我怎樣才能輕鬆做到這一點?

回答

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

或者你可以使用mv代替cp

+0

Tha如果你有很多文件,t不會工作 –

+0

Op De Cirkel:你爲什麼說它不起作用?我相信shell可以處理任何數量的文件作爲通配符擴展的結果;這是當你試圖將一個長列表傳遞給另一個'ARG_MAX'可能咬你的進程時。 – tripleee

+1

@OpDeCirkel:[''ARG_MAX'不適用於shell內建函數](http://stackoverflow.com/questions/6461227/limits-of-length-for-the-output-of-in-bash) –

2

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

+2

如果你有包含換行符的文件名,這將不起作用。 –

0

感謝您的修復。

我一直在使用組合下面的代碼來修復的Joomla網站的 '的eval(BASE64_DECODE'

發現:。 grep的-lr --include = * PHP 「的eval(BASE64_DECODE」 ./

刪除: 的grep -lr --include = .PHP 「的eval(BASE64_DECODE」 ./ | xargs的SED -i.bak的/ EVAL(BASE64_DECODE [^];/\ N/G'

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

相關問題