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/null하나만 있는 경우에도 일치하는 줄 앞에 파일 경로가 붙습니다 *.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

답변2

이는 도움이 될 것입니다:

for f in *
do
  grep -v [string] "$f" > "new_$f"
done

관련 정보