먼저 파이프 "|" links 명령은 첫 번째 매개 변수의 출력을 두 번째 매개 변수로 인수로 전달합니다. 두 개의 쉘 코드는 모두 find 명령의 출력을 다른 명령 (grep 및 xargs)으로 파이프합니다. 의 그 명령에 차례로 살펴 보자 :
첫 번째 명령은 :
발견 (즉 발견의 매뉴얼 페이지에서 설명입니다) "디렉토리 계층 구조에서 파일을 검색"할 수있는 프로그램입니다 찾을 수 있습니다. 구문은 (이 경우)
find <search directory> <search pattern> <action>
두 경우 모두 검색 디렉토리는 다음과 같습니다. (즉, 현재 디렉토리). 현재 디렉터리뿐만 아니라 모든 하위 디렉터리 (디렉터리 계층 구조)도 검색한다는 점에 유의하십시오.
검색 패턴은 -name (이 옵션에 대한 인수로 주어진 패턴과 일치하는 이름의 파일을 검색하는 것을 의미) 또는 -iname (이름과 동일하지만 대소 문자를 구분 함)과 같은 옵션을 허용합니다.
동작 패턴은 -print0 (지정된 검색 디렉토리에서의 위치를 포함하여 정확한 파일 이름 인쇄, 즉 파일에 대한 상대 또는 절대 경로) 또는 -exec (파일에서 주어진 명령 실행, 명령은 ";"로 끝나야하고 "{}"의 모든 인스턴스는 파일 이름으로 대체됩니다.
즉, (파이프의 왼쪽 첫 번째 부분) 최초의 쉘 코드
find . -iname \*.jpg -print0
검색 현재 디렉토리 계층 구조에서 ".JPG"를 종료하고 자신의 경로와 이름을 인쇄를 가진 모든 파일.두 번째 (첫 번째 부분)
find . -name '*' -exec file {} \;
현재 디렉토리 계층 구조에있는 모든 파일을 찾아 그들을
file <filename>
을 실행합니다. File은 파일 유형을 결정하고 인쇄하는 다른 명령입니다 (자세한 내용은 man 페이지를 참조하십시오. man 파일).
번째 명령은 : xargs를로 파이프되어 찾기 출력으로부터
xargs를 "구축하고 표준 입력 exectues 명령 라인"(사람 xargs를)하는 명령이다, 즉 xargs 명령. 이 빌드 및 실행하는 명령은이 경우 대체 문자열 명령에 파일에서 얻는 입력으로 대체 할 수 있습니다 {}의 즉 모든 인스턴스 (즉
cp -v {} /home/joachim/neu2"
옵션 -I {} 정의합니다 , 파일 이름). 옵션 -0은 입력 항목이 공백 문자 나 개행 문자로 종료 (분리)되지 않고 null 문자로만 정의됨을 정의합니다. 이것은 xargs 입력으로 find 출력을 처리하는 표준 방법을 사용할 때 필요합니다.
빌드되고 실행되는 명령은 물론 -v (자세한 정보) 옵션이있는 복사 명령이며 find에서 가져온 각 파일 이름을 디렉토리로 복사합니다.
셋째 명령 그렙
그렙는 입력 만 특정 출력 패턴과 일치하는 선 또는 문자열을주는 필터. -o 옵션은 전체 행 (man grep 참조)이 아닌 일치하는 문자열 만 인쇄하도록 grep에 지시합니다. -P는 다음 패턴을 perl 정규 표현식 패턴으로 해석하도록 지시합니다. 펄 정규식에서 ^는 라인의 시작이다. +는 임의의 문자열이다.이 임의적으로 콜론, 스페이스, 영숫자 (펄 정규 표현식에서 \ w +로 표시), 공백 및 문자열 "영상". 기본적으로이 grep 명령은 파일 출력을 필터링하여 이미지 파일 인 파일 이름 만 출력합니다.
당신이 실제로 당신이 (1) 이미지 파일을 나열하는 두 번째 쉘 명령의 출력을 (취하고 싶은 이제 어떻게
를 원 명령 : (http://www.comp.leeds.ac.uk/Perl/matching.html 여기 예를 들어 정규식의 펄 읽기에 대한)), (2) 적절한 형식으로 가져오고 (3) 첫 번째 쉘 명령 행에서 xargs 명령으로 파이프합니다 (그러면 원하는 복사 명령을 빌드하고 실행합니다). 그래서 이번에는 두 개의 파이프가있는 3 개의 (실제로는 4 개의) 무대 쉘 명령이 있습니다. 문제가 아니다. 우리는 이미 스테이지 (1)과 (3)을 가지고 있습니다. (스테이지 (3)에서는 입력이 더 이상 출력을 찾지 못하기 때문에 -0 옵션을 생략 할 필요가 있습니다; 개행자를 아이템 분리 자로 취급해야합니다).
(2) 단계가 여전히 누락되었습니다. 이를 위해 cut 명령을 사용하는 것이 좋습니다. 잘라내 기는 문자열을 변경하여 여러 필드 (원래 문자열의 구분 기호 문자로 구분)로 분리 한 다음 다시 배열 할 수 있습니다. 구분 문자로 ":"를 선택합니다 (이 옵션은 grep 출력의 파일 이름을 끝내고 -d ':'옵션을 사용합니다). 첫 번째 필드를 지정하도록 지시합니다 (옵션 -f1, essentialls : 파일 이름 만 인쇄하십시오. ":"뒤에 오는 부분), 즉단계 (2) 다음
cut -d':' -f1
것입니다 그리고 당신이 원하는 전체 명령은 될 것입니다 : http://www.linuxmanpages.com
정말 고마워요! 귀하의 답변에는 많은 정보가 포함되어있어서 모든 것을 훨씬 더 잘 이해할 수 있습니다. – newandlost
그리고 명령을 이해하는 데 얼마나 많은 도움이되는지는 미친 짓입니다. – newandlost
"... 또는 -exec (파일에서 주어진 명령을 실행하면 명령은"; "..."으로 끝납니다. 실제로 \를 의미합니까, 아니면 왜입니까? there \? – newandlost