この行があります。
find . -type f \( ! -name '*.plist' \) -and \( ! -name '*.mp4' \) -and \( ! -name '.DS*' \) -print0 | xargs -0 sed -i 's/AAA/BBB/g'
私の目的は、.plist、.mp4、および.DS *拡張子を持つファイルを除いて、現在のディレクトリ内のすべてのファイルからすべてのAAAエントリをBBBに繰り返し変更することです。
しかし、メッセージを受け取りました。
sed: 1: "./myDir/pro ...": invalid command code .
答え1
最も簡単な解決策は、次を使用することです。
find . -type f \( ! -name '*.plist' \) -and \( ! -name '*.mp4' \) -and \( ! -name '.DS*' \) -print0 | xargs -0 perl -pi -w -e 's/AAA/BBB/g'
答え2
GNU sedとは異なり、Mac OSXに付属のsedには-i
バックアップサフィックスを指定するオプション引数が必要です。バックアップを抑制するには、空の文字列(''
)を渡す必要があります。したがって、sedはyourをs/AAA/BBB/
バックアップサフィックスとして解釈し、最初のファイル名(./myDir/pro ...
)を実行するコマンドとして解釈します。もちろん、.
これは有効なsedコマンドではないため、エラーが発生します。これを念頭に置いて、次はうまくいきます。
find [...] | xargs -0 sed -i.bak 's/AAA/BBB/g'
またはバックアップ抑制に固執する場合
find [...] | xargs -0 sed -i '' 's/AAA/BBB/g'