我在xargs的帮助下使用find后跟sed实现如下相同:
find . -type f -name "file*" | sed -i.bak 's/word1/replace_word1/g'
我的问题是,现在我想从备份文件(* .bak)恢复更改.示例目录树将如下所示.我正在寻找linux命令(可能是一个链)来实现相同的.
$tree.|-- pdir1| |-- dir1| | |-- dir2| | | |-- file2| | | `-- file2.bak| | |-- file1| | `-- file1.bak| `-- dir3| |-- file3| `-- file3.bak`-- pdir2 |-- file1 `-- file1.bak
我可以使用以下find命令找到所有备份文件.但无法弄清楚下一步该做什么.如果你可以帮我解决这个问题,那将会很明显.
find . -type f -name "file*.bak"
注意
我将此问题视为一般情况.我曾多次遇到这种情况,但却为此编写了一个小包装脚本.在这里,我希望有一个通用而简洁的解决方案.
解决方法 一个选项可以是使用find重命名:find . -type f -name "*.bak" -exec rename 's/\.bak$//' {} \;
如果foo存在,这将不会重命名为foo.bak.要强制覆盖,请使用-f选项重命名:
find . -type f -name "*.bak" -exec rename -f 's/\.bak$//' {} \;
编辑:如果您不能使用重命名,请尝试:
find . -name "*.bak" -exec sh -c 'mv -f ${0%.bak}' {} \;
上述(最后)命令的说明:对于find返回的每个结果,调用一个shell命令,该命令将结果作为mv -f $0 ${0%.bak}的参数(用{}表示). $0是位置参数,${0%.bak}表示shell parameter expansion用于从参数末尾删除.bak.实际上,对于结果foo.bak,shell将发出命令mv -f foo.bak foo.
总结以上是内存溢出为你收集整理的恢复使用find后跟sed创建的多个备份文件全部内容,希望文章能够帮你解决恢复使用find后跟sed创建的多个备份文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)