파일 이름(또는 본문 텍스트)에 문자열이 포함된 여러 파일을 찾은 다음 해당 파일을 모두 특정 폴더로 이동하려면 어떻게 해야 합니까?

파일 이름(또는 본문 텍스트)에 문자열이 포함된 여러 파일을 찾은 다음 해당 파일을 모두 특정 폴더로 이동하려면 어떻게 해야 합니까?

예를 들어, 파일 이름에 "heavengames"라는 단어가 포함된 여러 독립 디렉터리에 있는 모든 HTML 파일(그리고 두 번째 질문으로 본문 텍스트에 "heavengames"라는 단어가 포함된 모든 HTML 파일)을 "천국 게임 스레드"?

답변1

이름에 해당 단어가 포함된 파일을 이동하려면:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

본문에 단어가 포함된 파일을 이동하려면:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

추신. 모든 것이 올바른지 확인하려면 처음 실행 시 echobefore를 추가하세요.mv

답변2

파일 이름을 기준으로 zsh 또는 bash ≥4에서:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

유연성을 높이려면(예를 들어 디렉터리 계층 구조를 다시 만들려면zmv(있다이 사이트의 많은 예).

grep파일 내용을 검색하는 데 사용합니다 . 최신 버전의 GNU 유틸리티(예: 내장되지 않은 Linux 또는 Cygwin):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

더 많은 이식 가능한 명령을 사용하려면 find. 보다러쉬의 대답.

관련 정보