programing

"find: paths must preference expression:" 현재 디렉토리에서 파일을 찾는 재귀 검색을 지정하려면 어떻게 해야 합니까?

lastmoon 2023. 4. 17. 22:18
반응형

"find: paths must preference expression:" 현재 디렉토리에서 파일을 찾는 재귀 검색을 지정하려면 어떻게 해야 합니까?

현재 디렉토리와 하위 디렉토리에서 일치하는 항목을 찾는 데 어려움을 겪고 있습니다.

내가 달릴 때find *test.c현재 디렉토리의 일치 항목만 표시됩니다.(서브디렉토리는 참조하지 않습니다)

내가 노력하면find . -name *test.c같은 결과를 기대하지만 하위 디렉토리에 있는 일치 항목만 표시됩니다.작업 디렉토리에 일치하는 파일이 있으면 다음 정보가 나타납니다.find: paths must precede expression: mytest.c

이 에러의 의미는 무엇이며, 현재의 디렉토리와 그 서브 디렉토리 양쪽에서 일치하는 것을 취득하려면 어떻게 해야 합니까?

따옴표 안에 넣어보세요.셸의 와일드카드 확장에 접속하고 있습니다.따옴표에는 다음과 같은 정보가 표시됩니다.

find . -name bobtest.c cattest.c snowtest.c

... 구문 오류를 발생시킵니다.그 대신 다음을 시도해 보십시오.

find . -name '*test.c'

파일 표현식 주위에 작은 따옴표가 있는 점에 유의하십시오. 이렇게 하면 와일드카드의 확장 셸(배시)이 중지됩니다.

셸이 파일 목록으로 "*test.c"를 확장하고 있습니다.다음과 같이 별표 이스케이프를 시도합니다.

find . -name \*test.c

매뉴얼 찾기:

NON-BUGS         

   Operator precedence surprises
   The command find . -name afile -o -name bfile -print will never print
   afile because this is actually equivalent to find . -name afile -o \(
   -name bfile -a -print \).  Remember that the precedence of -a is
   higher than that of -o and when there is no operator specified
   between tests, -a is assumed.

   “paths must precede expression” error message
   $ find . -name *.c -print
   find: paths must precede expression
   Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]

   This happens because *.c has been expanded by the shell resulting in
   find actually receiving a command line like this:
   find . -name frcode.c locate.c word_io.c -print
   That command is of course not going to work.  Instead of doing things
   this way, you should enclose the pattern in quotes or escape the
   wildcard:
   $ find . -name '*.c' -print
   $ find . -name \*.c -print

따옴표로 묶으세요.

find . -name '*test.c'

이 질문은 이미 답변이 되었군요.나는 단지 나에게 효과가 있었던 것을 공유하고 싶다.나는 그 사이에 공백이 없었다.(그리고.-name따라서 일부 파일을 제외한 파일을 선택하는 올바른 방법은 다음과 같습니다.

find . -name 'my-file-*' -type f -not \( -name 'my-file-1.2.0.jar' -or -name 'my-file.jar' \) 

@Chris J의 답변에 기재된 정규 표현으로 조합할 수 없는 파일명을 여러 개 찾다가 이 질문을 하게 되었습니다.이것이 나에게 효과가 있었던 것입니다.

find . -name one.pdf -o -name two.txt -o -name anotherone.jpg

-o또는-or논리 OR입니다.상세한 것에 대하여는, Gnu.org 의 「파일 검색」을 참조해 주세요.

CygWin에서 실행 중이었어

다음과 같이 시험해 보십시오.

cat $(file $( find . -readable) | grep ASCII | tr ":" " " | awk '{print $1}')

그것으로 당신은 아스키로 읽을 수 있는 모든 파일을 찾을 수 있고 고양이와 함께 읽을 수 있다.

체중과 측정 불가능한 체중을 지정하는 경우:

cat $(file $( find . -readable ! -executable -size 1033c) | grep ASCII | tr ":" " " | awk '{print $1}')

이 에러는, 사이사이를 잊어버렸을 때에 발생합니다.(그리고.-name.

find . -not \(-name 'scripts' \)

그랬어야 했는데

find . -not \( -name 'scripts' \)

제 경우엔 미행자가 없었어요/인패스

find /var/opt/gitlab/backups/ -name *.tar

언급URL : https://stackoverflow.com/questions/6495501/find-paths-must-precede-expression-how-do-i-specify-a-recursive-search-that

반응형