리눅스 명령 : 파일 찾기 및 명령 실행


16

디렉토리와 서브 디렉토리에서 모든 파일을 찾고 명령을 실행하려면 어떻게해야합니까?

예를 들어

find . -type f -name "*.txt" 

모든 txt 파일을 찾고

find . -type f -name "*.txt" | gedit

텍스트 파일 안에 gedit로 보냅니다. gedit가 모든 텍스트 파일을 열도록하겠습니다.

답변:


22

-exec플래그를 사용하여 일치하는 각 파일에서 명령을 실행할 수 있습니다 .

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

통사론

구문은 약간 이상합니다 (자세한 내용 -exec command ;은 맨 페이지를 참조하십시오).

The string `{}' is replaced by the current file name being processed

을 고려할 수도 -execdir있지만 일치하는 파일을 포함하는 하위 디렉토리에서 명령을 실행합니다 (일반적으로 선호 됨).


1
감사. 나는 그것이 작동하는 것을 본다. 그러나 끝 ( "{}"\ :)은 무엇을 의미합니까? 목록을 실행 하시겠습니까?

1
{}현재 파일 이름에 서, 세미콜론은 명령을 종료합니다. 백 슬래시와 주변 따옴표는 쉘 확장을 막기위한 것입니다.
David Cain

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


감사. 나는 그것이 작동하는 것을 본다. 그러나 -print0 | xargs -0 부분 의미?

1
@xyz, 당신의 플래그에 대해 읽을 수 있는 사람이 페이지를 사용하여 UNIX 명령. 시도 man find하거나 man xargs, 다음 /주어진 플래그를 검색 할 수 있습니다. 문서는 아주 훌륭합니다. 질문에 대답해야합니다.
David Cain

1
-print0각 항목 뒤에 NULL 문자를 인쇄 -0하고 항목이 NULL 문자로 분리 될 것으로 예상합니다. 까다로운 이름을 처리하는 가장 안전한 방법입니다.
Notinlist

그리고 구문이 xargs -0 gedit 대신 gedit xargs -0이 아니라는 것이 조금 이상하지 않습니까? 나는 전자가 효과가 없지만 그 이유를 알지 못한다는 것을 안다.

3
xargs는 gedit에 전달하기 전에 많은 인수를 "일괄 처리"할 수 있으므로 성능상의 이유로 xargs가 -exec보다 선호됩니다. 각 파일에 대해 개별적으로 gedit를 실행해야한다면 '... -print0 | xargs -0 gedit ''... -print0 | xargs -0 -i gedit {} 'xargs는 찾기 및 화면과 같은 명령 중 하나입니다.
arclight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.