我在一个主目录中有无数个目录。这些目录中的每一个都有多个级别的子目录。传播其中,有文件名为Info.plist
.
在这些Info.plist
文件中,有以下几行:
<string>/Users/Shared/Library/Mail/V7/74309-67B6-44E3-BD66-9384D1E54398/Junk.mbox</string>
这些行,每个文件可能是一个或多个,可能不同,例如
<string>/Users/Shared/Library/Mail/V7/74398/Junk.mbox</string>
<string>/Users/Shared/Library/Mail/V7/7-67B8/Sent.mbox</string>
<string>/Users/Shared/Library/Mail/V7/OLD/Old.mbox</string>
我有兴趣在这些Info.plist
文件中找到这些行并将Shared
部分更改为Fireball
.
因此,前一行将变为
<string>/Users/Fireball/Library/Mail/V7/74398/Junk.mbox</string>
<string>/Users/Fireball/Library/Mail/V7/7-67B8/Sent.mbox</string>
<string>/Users/Fireball/Library/Mail/V7/OLD/Old.mbox</string>
其余部分保持原样。
因此,首先我必须递归扫描目录结构,找到Info.plist
它们拥有的所有文件,扫描每个文件Info.plist
中的Shared
关键字(如果它们在路径中使用)并将其更改为Fireball
.
我如何使用一些神奇的 unix 命令来做到这一点?
我在摆弄这个
find . -type f -name Info.plist -exec sed 's/Shared/Fireball/g' {} +
这几乎似乎正在工作,因为它打印以控制台正确的更改,但文件没有改变。
假设您
sed
支持-i
就地编辑标志(您可能在主流操作系统中遇到的大多数标志都支持),您可以执行以下操作:如果没有,您可以尝试
perl
:只需绝对确保字符串
Shared
的每个实例都是您要替换的实例。为了安全起见,使用更多的路径可能更安全:命令
输出