find 명령이 작동하지 않습니다: "잘못된 옵션 --n"

find 명령이 작동하지 않습니다: "잘못된 옵션 --n"

내 명령은 다음과 같습니다

find $PATH -name '$FILE.log' > /tmp/file-list.txt

다음과 같은 오류 메시지가 계속 나타납니다.

find: illegal option -- n

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

그 오류 메시지로 판단해 보면, 그럴 것 같아요.

  • "linux" 레이블에도 불구하고 Linux 기반 시스템에 있지 않을 수도 있습니다. find일반적으로 Linux 기반 시스템에서 발견되는 구현에서는 해당 단어를 사용하여 알 수 없는 옵션에 대한 오류를 나타내지 않기 때문입니다.
  • $PATH변수는 설정되지 않았습니다. 이는 실행 중인 쉘이 Bourne 또는 Korn 쉘(AT&T 구현)일 가능성이 있음을 나타냅니다.

저것불법적인 선택find전통적인 Unix 구현에서 일반적인 표현입니다.

이러한 전통적인 구현은 또한필요하다와 같은 것을 사용하려면 최소한 하나의 파일 매개변수가 있어야 합니다 -name.

그렇지 않고 -name다음 인수인 경우 (술어가 아닌) 옵션으로 처리됩니다 find.

( -n첫 번째 옵션 -name은 의 약어임 -n -a -m -e)은 유효한 옵션이 아닙니다 find.

따라서 확장이 $PATH논란으로 이어지지 않을 가능성이 높습니다.

이는 다음과 같은 상황에서 발생합니다.

  1. $PATH설정되지 않음
  2. $PATH빈 문자열로 설정
  3. $PATH공백, 탭 또는 줄 바꿈만 포함합니다(기본값 $IFS).

$PATH는 명령이 포함된 실행 파일을 찾기 위해 콜론으로 구분된 디렉터리 목록을 포함하는 특수 변수이므로 3 find개, 아마도 2개( find 명령이 현재 디렉터리에 있지 않은 경우)를 제외할 수 있습니다. 그렇지 않으면 오류가 발생합니다 find: command not found.

설정 해제된 경우 $PATH( 1위), (또는 일반적으로 사용되는 술어 등 execvp()) 및 일부 쉘(일반적으로 이러한 쉘에서 발견되는 Korn 및 Bourne 쉘 포함)에서envfind-exec전통적인운영 체제)은 find기본 검색 경로에서 검색하여 찾을 수 있습니다( bash셸과 같은 경로는 이 작업을 수행하지 않지만 $PATH시작 시 설정되지 않은 경우 기본값으로 설정(내보내지는 않지만)).

여기, 당신이 원하는 것 같아요:

  • $PATH저장소 디렉터리 이름과 다른 변수 이름을 사용하세요(예 $dir: ).
  • 변수를 인용하십시오
  • ${dir:-.}비어 있거나 설정되지 않은 경우 현재 디렉터리를 기본값으로 사용하려는 경우 $dir사용합니다 .
  • $PATH( 변수가 설정되지 않은 이유를 조사할 수도 있습니다 . 이는 매우 드문 일입니다.)

그래서:

dir=some-dir
find "${dir:-.}" -name "$FILE.log"

$dir, 로 시작하지 않는 것으로 가정하고 연산자(예: , , ) -가 아니며 와일드카드( , , )를 포함 하지 않습니다 . , 문자 그대로 이름이 지정된 파일 이 아닌 ).find!()$FILE*?[...]$FILE.logsomething.logsomething$FILE$FILE.log

답변2

$PATH(일반적으로 재정의하지 않는 한 많은 문제가 발생하지만) 콜론으로 구분된 디렉터리 목록입니다. find명령줄에서 공백으로 구분된 디렉터리 목록을 가져옵니다.

find /path/to/dir1 /path/to/dir2 -name "$FILE.log"

또한 작은따옴표는 쉘이 변수를 평가하는 것을 비활성화하므로 $FILE.log위에서 언급한 것처럼 큰따옴표가 필요할 수 있습니다.

$PATH다음과 같은 다양한 방법으로 공백으로 구분된 목록으로 변환 할 수 있습니다 .

 echo $PATH | sed 's/:/ /g'

그리고 명령 대체를 사용하여 목록을 find 명령에 넣으십시오.

find $(echo $PATH | sed 's/:/ /g') -name "$FILE.log"

답변3

Google에서 동일한 오류 메시지 "불법 옵션 -n"을 검색했을 때 여기로 왔습니다.

저는 MacOS를 사용하고 우리 팀은 Linux/Windows를 사용합니다. 그들의 버전은 find더 관대해 보입니다.

깨진 명령은 다음과 같습니다

find -name "*.jsonnet"

첫 번째 인수에 점을 추가하여 문제를 해결합니다.

find . -name "*.jsonnet"

관련 정보