パスワード
find /tmp/ -type f \
\( -name "*.h" \) -o \( -name "*.cpp" \) -o \
\( \! -name "*.bak" \) -exec \
sed -i '1s/^/#include <stdint.h>\n/' {} +
これが正しいアプローチであるかどうかは完全にはわかりません。一時ファイルを使用せずにファイルに直接書き込みます。行の先頭を変えたいです。。時間そして.cppファイルには以下が含まれていますが、含まれていません。.bak文書。
効率的な交換を行うには?注:私はGNUを使用していますsed
。
エラーに適用されたファイルを挿入するためにTerdonのコマンドを試しました。
$ cat test.sh
gfind /tmp/ -type f \
\( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
-exec gsed -i '1s/^/#include <stdint.h>\n/' {} +
$ sh test.sh
$ cat test.sh
#include <stdint.h>
gfind /tmp/ -type f \
\( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
-exec gsed -i '1s/^/#include <stdint.h>\n/' {} +
そこにあるすべてのコマンドはGNU:findとsedです。
答え1
この試み:
find /tmp/ -type f -name "*.h" -o -name "*.cpp" \
-exec sed -i '1s/^/#include <stdint.h>\n/' {} +
また、私が正しく指摘したように、これは! -name "*.bak"
重複しています。パターンは-name *foo
過度に一致しますfoo
。したがって、*.cpp
銀は*.h
除外されました*.bak
。