次のコマンドを適用してみてください。
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
/predicatesは標準ではありませんが、頻繁に実装されています。
答え2
はい、一緒に歩くのがxargs
正しい方法です。
簡単な場合
echo *.ovpn | xargs sed -i 's/auth-user-pass/auth-user-pass pass.txt/g'
ただし、名前にスペースが含まれていないファイルでのみ機能します。安全な方法は
printf '%s\0' *.ovpn | xargs -0 sed ...
パイプライン全体を実行しない場合は、beforeまたはbeforeをroot
指定してください。sudo
xargs
sed