grep을 사용하여 파일에서 콘텐츠를 찾고 일치하는 경우 이동합니다.
문제
이동해야 하는 파일 목록을 생성하기 위해 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를 확인하세요.