bestsource

찾기: -exec 인수 누락

bestsource 2023. 4. 29. 09:33
반응형

찾기: -exec 인수 누락

제가 오늘 명령을 받고 도움을 받았는데, 작동이 안 되는 것 같습니다.다음은 명령입니다.

find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {}\;

껍데기가 돌아옵니다.

find: missing argument to `-exec'

재귀적으로 (을 ffmpeg에서 입니다..rm 형식으로 합니다..mp3파일 형식이 작업이 완료되면 다음을 제거합니다..rm방금 변환된 파일입니다.

A -exec은 " 은다종합니다야해료로으명음"로.;(따라서 일반적으로 입력해야 합니다.\;또는';' 위해) 셸에의해피하기또위해는석)+다른 점은 다음과 같습니다.; 명령은 한 번씩 되며, " 은파호다니번출됩한씩명령일당다▁the니▁with▁is호됩"가 사용됩니다.+모든 파일 이름을 사용하여 가능한 한 적게 호출됩니다(일반적으로 한 번이지만 명령줄의 최대 길이가 있으므로 분할할 수 있음).다음 예를 참조하십시오.

$ cat /tmp/echoargs
#!/bin/sh
echo $1 - $2 - $3
$ find /tmp/foo -exec /tmp/echoargs {} \;
/tmp/foo - -
/tmp/foo/one - -
/tmp/foo/two - -
$ find /tmp/foo -exec /tmp/echoargs {} +
/tmp/foo - /tmp/foo/one - /tmp/foo/two

명령에 두 가지 오류가 있습니다.

먼사용니다합을 합니다.{}; 러나그나;고유한 매개 변수여야 합니다.

번째,는 째둘, 명은다서끝다납으로 끝납니다.&&find를이면 " find"라는 합니다. 성공한 경우 이름이 지정된 파일을 제거합니다.{};만약 당신이 쉘을 사용하고 싶다면.-exec. 를 들어, 명과다음같셸명에시실합니다행야해로으적은서령▁as.-exec sh -c 'ffmpeg ... && rm'.

그러나 bash 명령 내에 {}을(를) 추가하면 안 됩니다. 특수 문자가 있으면 문제가 발생합니다.대신 다음 시간 이후에 추가 매개 변수를 셸에 전달할 수 있습니다.-c command_string)man sh):

$ ls
$(echo damn.)
$ find * -exec sh -c 'echo "{}"' \;
damn.
$ find * -exec sh -c 'echo "$1"' - {} \;
$(echo damn.)

가 .$첫 번째 예에서는 셸에 의해 평가됩니다.파이있상보상세요해라는 파일이 .$(rm -rf /):-)

참고 ()ㄹ: 더 -의 첫 에 됩니다.$0 해를 것입니다. 이 일으로실중매변포설이특다변정니입수수반 했습니다. 여기서 해를 끼치지는 않겠지만, 우리는 그것을 그냥 설정합니다.- 그고시은으로 합니다.$1.)

그래서 당신의 명령은 다음과 같은 것일 수 있습니다.

find -exec bash -c 'ffmpeg -i "$1" -sameq "$1".mp3 && rm "$1".mp3' - {} \;

더 방법이 . 는 지원합니다. 지원을 찾으십시오.and그리고.or그래서 당신은 다음과 같은 것들을 할 수 있습니다.find -name foo -or -name bar그러나 그것은 또한 작동합니다.-exec명령이 성공적으로 종료되면 true로 평가되고 그렇지 않으면 false로 평가됩니다.다음 예를 참조하십시오.

$ ls
false  true
$ find * -exec {} \; -and -print
true

합니다.true하지만 때문은 아닙니다.false.

두 exec 을있습다와 할 수 .-and전자가 성공적으로 실행된 경우에만 후자를 실행합니다.

각각 앞에 공백을 넣으십시오. \;

작업:

find . -name "*.log" -exec echo {} \;

작동하지 않음:

find . -name "*.log" -exec echo {}\;

이제 알았어요.찾기에서 exec에서 두 개의 명령을 실행해야 하는 경우 실제로 두 개의 별도 exec이 필요합니다.이것은 마침내 저에게 효과가 있었습니다.

find . -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 \; -exec rm {} \;

사이에 간격을 두어야 합니다.{}그리고.\;

명령은 다음과 같습니다.

find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {} \;

참고로.
방금 Cygwin 시스템(Windows에서 UNIX 에뮬레이션됨)에서 "find-exec" 명령을 사용하려고 했는데 세미콜론 앞의 백슬래시를 제거해야 하는 것 같습니다.
find ./ -name "blabla" -exec wc -l {} ;

GNU를 사용할 때 문제가 있는 다른 사용자는 Windows 명령 프롬프트에서 이진 파일을 찾습니다.세미콜론은 다음을 사용하여 이스케이프해야 합니다.^

find.exe . -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 ^;

탈출을 좀 해야 할 것 같아요.

find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} \-sameq {}.mp3 \&\& rm {}\;

아마존 Opsworks Chef bash 스크립트에서 유사한 "missing-execargs"를 보는 사람이 있을 경우를 대비하여 \;를 피하기 위해 백슬래시를 하나 더 추가해야 했습니다.

bash 'remove_wars' do
  user 'ubuntu'
  cwd '/'
  code <<-EOH
    find /home/ubuntu/wars -type f -name "*.war" -exec rm {} \\;
  EOH
  ignore_failure true
end

또한 "find: missing 인수 to -exec"을 가진 다른 사용자가 있다면 다음과 같은 도움이 될 수 있습니다.

일부 셸에서는 이스케이프를 수행할 필요가 없습니다. 즉, ";" 앞에 "\"가 필요하지 않습니다.

find <file path> -name "myFile.*" -exec rm - f {} ;

{} 및 &&이 모두 명령줄로 확장되어 문제가 발생합니다.시도해 보는 것이 좋습니다.

find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i \{} -sameq \{}.mp3 \; -exec rm \{} \;

, bash 스크립트에서는 methods, bash "methods", "methods", "methods"를 때 작동하지 않습니다.-exec bash -c여기에 제가 찾은 다른 솔루션도 추가합니다.

UploadFile() {
  curl ... -F "file=$1"
}

find . | while read file;
  do
    UploadFile "$file"
  done

는 각파일대명해령실행을솔때검에서 각 에 대한 할 때 가장 .find그래서 나는 이 솔루션이 사용하지 않아도 괜찮기를 바랍니다.-exec

종료 후 공백을 남겨도 동일한 오류가 발생했습니다.;-exec 명령의.
다후빈 공제을거다 뒤에 합니다.;

그래도 "find: missing argument to -exec"이 표시되면 exec 인수를 따옴표로 묶습니다.

find <file path> -type f -exec "chmod 664 {} \;"

언급URL : https://stackoverflow.com/questions/2961673/find-missing-argument-to-exec

반응형