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
.