Error[8]: Undefined offset: 6, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中. 我在xargs的帮助下使用find后跟sed实现如下相同: find . -type f -name "file*" | sed -i.bak 's/word1/replace_word1/g' 我的问题是,现在我想从备份文件(* .bak)恢复更改.示例目录树将如下所示.我正在寻找linux命令(可能是一个链)来实现相同的. 我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中.

我在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创建的多个备份文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
恢复使用find后跟sed创建的多个备份文件_系统运维_内存溢出

恢复使用find后跟sed创建的多个备份文件

恢复使用find后跟sed创建的多个备份文件,第1张

概述我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中. 我在xargs的帮助下使用find后跟sed实现如下相同: find . -type f -name "file*" | sed -i.bak 's/word1/replace_word1/g' 我的问题是,现在我想从备份文件(* .bak)恢复更改.示例目录树将如下所示.我正在寻找linux命令(可能是一个链)来实现相同的. 我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中.

我在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创建的多个备份文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存