grep을 사용하여 파일에서 콘텐츠를 찾고 일치하는 경우 이동합니다.

StackOverflow https://stackoverflow.com/questions/91899

  •  01-07-2019
  •  | 
  •  

문제

이동해야 하는 파일 목록을 생성하기 위해 grep을 사용하고 있습니다.

grep -L -r 'Subject: \[SPAM\]' .

이 목록을 mv 명령에 전달하고 파일을 다른 곳으로 이동하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

-Z는 파일 이름 뒤에 0(\0)이 있는 출력을 의미합니다(따라서 공백은 구분 기호로 사용되지 않습니다).

xargs -0

\0을 구분 기호로 해석한다는 의미입니다.

그 다음에

-I{} mv {} DIR

대체한다는 뜻 {} 파일 이름을 사용하면 얻을 수 있습니다. mv filenames DIR.

다른 팁

이 대안은 xargs를 사용할 수 없는 경우에 작동합니다.

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done

이것이 제가 Fedora Core 12에서 사용하는 것입니다:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR

이것이 나에게 도움이 된 것입니다:

grep -lir 'spam' ./ | xargs mv -t ../spam

물론 저는 이미 필수 폴더에 있었습니다(그래서 ./) 이웃 폴더로 옮겼습니다.하지만 어떤 경로로든 변경할 수 있습니다.

왜 허용된 답변이 작동하지 않는지 모르겠습니다.또한 파일 이름에 공백과 특수 문자가 없었습니다. 어쩌면 이것이 작동하지 않을 수도 있습니다.

여기서 도난당했습니다: 텍스트 문자열이 포함된 파일을 찾아서 이동하는 Grep 명령

아마도 이것이 효과가 있을 것입니다:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

작성한 grep이 예상한 파일 경로를 반환한다고 가정합니다.

여러 가지 방법이 있지만 느리지만 안전한 방법은 다음과 같습니다.

IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS

나에게 딱 맞는 일 :

  • MYSTRINGTOSEARCH라는 단어가 포함된 텍스트를 포함하는 파일을 MYDIR 디렉터리로 이동합니다.

    찾다 .-type f -exec grep -il 'MYSTRINGTOSEARCH' {} \;-exec mv {} MYDIR/ \;

이게 도움이 되길 바란다

Grep을 사용하여 결과를 다음 명령에 전달할 수 있습니다 ...| Xargs MV {} 대상

자세한 내용은 man xargs를 확인하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top