찾기: -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
'bestsource' 카테고리의 다른 글
@Html.HiddenFor는 ASP의 목록에서 작동하지 않습니다.NET MVC (0) | 2023.04.29 |
---|---|
디버깅에 Visual Studio web.config 변환 사용 (0) | 2023.04.29 |
Bash 스크립트 내에서 문자열을 명령으로 실행 (0) | 2023.04.29 |
IDE를 사용할 때 Powershell에서 타사 실행 파일을 호출할 때 오류 발생 (0) | 2023.04.29 |
SQL Server + SQL Server 인증 + 오류에 로그인할 수 없음: 18456 (0) | 2023.04.29 |