差不多10年前,我问过这个问题
并得到了这个有用的命令find . -type f -print0 | xargs -0 sed -i 's/regex_search_term/replace_term/g'
我决定了解更多关于find
,xargs
和sed
声明的信息。在 bash 版本 4.4.20(1)-release 的 Ubuntu 18.04 上,我可以将语句简化为:
find . -type f -print | xargs sed -i 's/regex_search_term/replace_term/g'
然后可以再次简化为:
find . -type f | xargs sed -i 's/regex_search_term/replace_term/g'
所以我的问题是,不分别使用-print0
带有 和 标志的标志 有-0
什么缺点吗?完全放弃标志有什么缺点吗?它们是否明确用于与不同的类 Unix 系统兼容?find
xargs
-print
不使用
-print0
并且xargs -0
会被文件名中的一些罕见但合法的字符混淆的版本,包括空格、制表符、换行符、引号和反斜杠。零字节(ASCII NUL 字符)是文件路径中唯一不能出现的内容,因此将其用作分隔符可以避免这些潜在问题。但实际上有一个更简单的方法。现代版本的
find
主要版本与直接在命令-exec ... +
中执行基本相同的操作:xargs
find
这并没有所有的选项
xargs
,所以如果你需要除了通常的 collect-names-and-run-it 之外的东西,你仍然应该使用-print0 | xargs -0
.