find의 -path 및 -prune 옵션 설명

find의 -path 및 -prune 옵션 설명

내가 가장 잘 이해하는 간단한 스크립트가 있지만 내가 이해하지 못하는 것은 find 명령입니다. 많은 문서가 있지만 더 명확하지는 않습니다. 내 생각은 이것이 for 루프처럼 작동하고 현재 발견된 파일이 {}로 바뀌고 $HOME/$dir_name에 복사된다는 것입니다. 하지만 검색 방법- 작은 길그리고-트림 -o일하다? 이렇게 구체적이고 관련성이 높은 문서를 갖고 있으면서도 무슨 일이 일어나고 있는지 아직 모르는 것은 짜증나는 일입니다.

#!/bin/bash
# The files will be search on from the user's home
# directory and can only be backed up to a directory
# within $HOME

read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name

# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name

# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0

이것은 제가 이 문제를 해결할 수 있어야 한다는 것을 알고 있는 문서입니다.

-경로 모드

파일 이름은 쉘 패턴과 일치합니다. 메타문자는 처리되지 않습니다./또는. 예를 들어, .-path "./sr*sc"를 찾으면 다음과 같은 디렉토리에 대한 항목이 인쇄됩니다../src/기타(있는 경우). 전체 디렉토리 트리를 무시하려면 트리의 모든 파일을 확인하는 대신 -prune을 사용하십시오. 예를 들어 디렉터리를 건너뜁니다.소스/이맥스그리고 그 아래의 모든 파일과 디렉터리를 검색하고 발견된 다른 파일의 이름을 인쇄하려면 다음 작업을 수행하십시오.

find . -path ./src/emacs -prune -o -print

~에서Findutils 매뉴얼

-- 조치: -exec 명령은 안전하지 않은 변형입니다.-execdir작업은 POSIX에 의해 지정됩니다. 가장 큰 차이점은 명령이 다음 디렉터리에서 실행된다는 것입니다.찾다불린다, 라는 뜻이다.{}파일의 기본 이름과 일치하는 것이 아니라 시작 디렉터리 중 하나의 이름으로 시작하는 상대 경로로 확장됩니다.

일부 구현이지만찾다바꾸다{}인수에서 단독으로 나타날 때만 GNU찾다바꾸다{} 어디에 나타나든 상관없습니다.

그리고

예를 들어, 현재 디렉토리 안이나 아래의 모든 C 헤더 파일을 /tmp/master 파일과 비교하려면 다음을 수행하십시오.

      find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'

답변1

-path와 정확히 동일하게 작동 -name하지만 마지막 구성 요소 대신 확인 중인 파일의 전체 경로 이름에 패턴을 적용합니다.

-prune디렉토리인 경우 발견된 파일 아래로 내림차순을 비활성화합니다.

그것들을 하나로 합치면, 명령은

find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
  1. 에서 파일 찾기를 시작하세요 $HOME.
  2. 일치하는 파일을 찾으면 $HOME/$dir_name그 아래로 이동하지 않습니다(하위 디렉터리를 "자르기").
  3. 그렇지 않은 경우( -o) 일치하는 파일이 발견되면 *$file_suffix해당 파일을 에 복사합니다 $HOME/$dir_name/.

$HOME아이디어는 $HOME. -prune백업의 백업을 방지하려면 다음 섹션이 필요합니다.

답변2

이는 find 명령(-exec 문)의 일부입니다.

이를 통해 find명령으로 찾은 파일/디렉토리와 상호 작용할 수 있습니다.

find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;

find $HOME $HOME에서 파일/디렉터리 검색을 나타냅니다.

배우려면 -path <some_path>다음을 참조하세요."경로 찾기" 설명

배우려면 -prune다음을 참조하세요.https://stackoverflow.com/questions/1489277/how-to-use-prune-option-of-find-in-sh

-oOR를 의미하므로 -path <some_path>OR-name *$file_suffix

-exec명령 실행을 나타냅니다.

cp {} $HOME/$dir_name/ 일치하는 파일을 복사하세요.$HOME/$dir_name/

\;종료 -exec명령을 나타냅니다.

관련 정보