소유자가 root:users가 아닌 경우 디렉터리 아래에서 반복적으로 소유자를 root:users로 변경해 보았습니다.
cd /dir/
find . \( ! -user root -o ! -group users \) -print0 | xargs -0 chown -vc root:users
오류가 발생합니다.
chown: missing operand after ‘root:users’
Try 'chown --help' for more information.
왜 오류가 발생하나요? 어떻게 해결할 수 있나요?
답변1
chown에 재귀 스위치를 사용하십시오.
chown -R root:users dir
그렇게하는 게 좋겠습니다.
오류가 발생한 이유에 대한 추가 정보:찾다명령이 파일을 찾을 수 없는 경우존마지막에 피연산자 없이 실행되므로 이 오류가 발생합니다.
원래 명령 형식을 고수하려면 다음을 추가할 수 있습니다.-아르 자형xargs로 전환하면 파일을 찾을 수 없을 때 오류가 제거됩니다.
답변2
-R
플래그를 사용할 수 있다는 관찰 외에도 chown
오류 메시지가 나타나는 이유는 거의 확실하게 [1] 변경해야 할 파일이 없기 때문입니다. gnu 버전에는 명령이 입력되지 않은 경우 xargs에게 명령을 실행하지 않도록 지시하는 xargs
추가 플래그가 있습니다 .-r
xargs
이는 잘못된 접근 방식 이지만 POSIX 버전은 find
일괄 명령을 사용합니다. 사용
find . \( ! -user root -o ! -group users \) -exec chown -vc root:users {} +
+
예제에서 사용된 일반적인 것 대신 마지막 것을 주목하십시오 . With 이 명령은 일치하는 각 파일에 대해 한 번 실행되지만 파일은 그룹화되어 일괄적으로 실행됩니다.\;
-exec
\;
+
예를 들어 입력 및 프로세스 라인을 쌍으로 읽으려는 경우 xargs를 계속 사용해야 하는 경우가 있지만 이러한 경우는 드뭅니다. 거의 항상 파일당 하나의 명령을 실행하거나 가능한 많은 파일을 일괄 처리하고 배치당 하나의 명령을 실행하려고 합니다.
[1] xargs 구현에 따라 많은 명령 버퍼를 정확하게 파일로 채웠을 수도 있지만 파일이 전혀 없을 가능성이 더 높습니다.