尝试应用以下命令:
sudo sed -i "s/auth-user-pass/auth-user-pass pass.txt/g" *.ovpn
但我不断收到以下错误:
sudo: unable to execute /bin/sed: Argument list too long
我要搬到吗xargs
?
答案1
非xargs
变体使用find
:
find . -maxdepth 1 -type f -name '*.ovpn' \
-exec sed -i 's/auth-user-pass/auth-user-pass pass.txt/g' {} +
这将sed
在尽可能大批量的文件名上执行您的命令(仅限常规文件,没有匹配的目录名等),文件名与当前目录中的给定模式匹配(仅)。它还可以处理潜在的奇怪文件名(空格、换行符等)
选项-maxdepth
/谓词不是标准的,但经常实现。
答案2
是的,一起走xargs
才是正确的路。
简单的情况是
echo *.ovpn | xargs sed -i 's/auth-user-pass/auth-user-pass pass.txt/g'
但它仅适用于名称不包含空格的文件。安全的方法是
printf '%s\0' *.ovpn | xargs -0 sed ...
如果您不想将整个管道运行为root
,请指定sudo
beforexargs
或 before sed
。