grep -v [文字列] フォルダ全体

grep -v [文字列] フォルダ全体

/path/の形式のファイルを含むフォルダがあります。.filetype

grep -v [string] [filename] > [filename copy].filetype

このフォルダ内のすべてのアイテムについて。私はcd /path.ループを設定して設定する必要があると思います。私は構文についてよく知らず、何も混乱させたくありません。次の形式で作成しますか?

for [something] in *.filetype
do
  grep -v [string] [filename] > "[filename].filetype"
done

??

役に立つ場合は、ファイルが特定の方法(時間や日付など)でフォーマットされていないため、順序は重要ではありませんが、ファイル名を保存する必要があります。これが可能かどうかわからない

よろしくお願いします。頭が痛くなったら申し訳ありません。

編集する:**

私の言葉は、私のファイルが特別な方法で構成されていないことです。

ベストアンサー1

あなたはできます:

(cd /path && grep -vFe 'string' -- /dev/null *.filetype) > result.filetype

追加すると、ファイルが/dev/null1つしかない場合でも、一致する行の前にファイルパスが付けられます*.filetype。 GNU実装を介してgrepこのオプションを使用することもできます-H

result.filetype他のファイルは現在の作業ディレクトリに作成されます。パターンを一致さ/pathせるには、内部で実行しないようにする必要があります。そうしないと、無限ループが発生し、最終的にディスクがいっぱいになる可能性があります。result.filetype*.filetype/path

再帰的にファイルを見つけるには、*.filetype次のものを使用できますfind

(
  cd /path &&
    LC_ALL=C find . -name '*.filetype' -type f -exec \
      grep -vFe 'string' -- /dev/null {} +
) > result.filetype

またはGNU実装を使用してくださいgrep

(
  cd /path &&
    LC_ALL=C grep -r --include='*.filetype' -vFe 'string' .
) > result.filetype

(隠しファイルも考慮します。)

または次のようにzsh

(cd /path && grep -vFe 'string' -- /dev/null **/*.filetype(.)) > result.filetype

おすすめ記事