오류 mv 대상이 디렉터리가 아니며 '-exec' 매개변수가 누락되었습니다.

오류 mv 대상이 디렉터리가 아니며 '-exec' 매개변수가 누락되었습니다.

test*.txt저는 Red Hat Enterprise Linux Server 버전 7.5(Maipo)에서 10일 전 6개월 전 지정된 모든 파일을 찾는 스크립트를 작성 중입니다 . 복사한 원래 디렉터리에는 유효한 파일이 포함되어 있지만 파일을 이동하려고 하면 오류가 발생합니다. 스크립트와 오류 메시지는 다음과 같습니다. 왜 실패하며 이를 해결하려면 어떻게 해야 합니까?

find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

mv: target    /INTER/f/d/o/test1.txt    is not a directory
mv: target    /INTER/f/d/o/test2.txt    is not a directory
mv: target    /INTER/f/d/o/test3.txt    is not a directory
mv: target    /INTER/f/d/o/test4.txt    is not a directory

또한 파일이 아카이브 디렉터리에 7개월 10일 동안 보관된 후에 삭제하십시오. 아래 스크립트를 사용하면 다음 오류가 발생합니다.

find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};

find: missing argument to `-exec'

답변1

첫 번째 명령:

find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

여기에서는 패턴과 일치하고 충분히 오래된 파일을 찾은 것으로 이동한다고 가정합니다. 명령 mv비트 형식이 잘못되었습니다. 다음과 유사해야 합니다.

-exec mv {} /some/destination/path \;

즉, "발견된 파일( {})을 어떤 대상으로 이동"시키는 것입니다.

파일을 이동할 위치가 명령에서 명확하지 않지만 작성하면 파일이 이동됩니다.도착하다경로 이름을 찾았습니다. mv여러 파일을 디렉터리가 아닌 위치로 이동하려고 시도하기 때문에 실패합니다 .

두 번째 명령에서는

find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};

방금 인수를 제대로 종료하지 못했습니다 -exec. 마지막 비트는 다음과 같아야합니다

-exec rm {} \;

아니면 단순히

-delete

구현이 find이를 지원하는 경우.

여러분도 구경해 보세요”"find"의 -exec 옵션 이해".

답변2

첫 번째 명령:

find ... -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

mv인수 /INTER/f/d/o/test*.txt(문자 그대로 별표 포함) 에 전달된 /INTER_ARCHIVE/f/d/o/다음 find현재 처리 중인 파일에 전달됩니다. mv세 개의 매개변수가 표시되므로 처음 두 개를 세 번째 매개변수로 이동하고 세 번째 매개변수는 디렉터리여야 합니다.

명령이 쉘을 통해 실행 되지 않기 test*.txt때문에 일치하는 파일 이름으로 확장 되지 않습니다 (쉘을 사용해야 함 ). 와일드카드는 여기서 위반하므로 어쨌든 그렇게 하고 싶지는 않습니다 .find-exec-exec sh '...' \;test*.txt-mtime

아마도 당신이 원하는 것은

find ... -exec mv {} /INTER_ARCHIVE/f/d/o/ \;

find현재 처리 중인 파일을 으로 이동합니다 /INTER_ARCHIVE/f/d/o/.

또는 GNU를 사용하십시오 mv:

find ... -exec mv -t /INTER_ARCHIVE/f/d/o/ {} +

한 번의 호출로 여러 파일을 처리합니다 mv.

관련 정보