내가 이것을 입력할 때마다:
find . -type f -name 'diag*' -mtime +30 -exec mv {} temp_diag \;
SunOS에서는 항상 이 메시지를 받습니다.
mv: ./temp_diag/diagnostic.log.68.gz and temp_diag/diagnostic.log.68.gz are identical
mv: ./temp_diag/diagnostic.log.37.gz and temp_diag/diagnostic.log.37.gz are identical
mv: ./temp_diag/diagnostic.log.18.gz and temp_diag/diagnostic.log.18.gz are identical
내가 사용하고 있는 명령은 잘 작동하지만 메시지의 의미에만 관심이 있습니다.
답변1
이 명령을 사용하면 현재 경로에서 아래로 이동합니다. 그래서 당신은 다음과 같은 것을 가지고 있습니다 :
dir1
dir1/temp_diag
dir1/temp_diag/file1
내부에서 명령을 실행 dir1
하고 dir1/temp_diag를 살펴보고 실행합니다.
mv ./temp_diag/file1 temp_diag/file1
본질적으로 명령에 파일을 자체적으로 이동하라고 지시하는 것입니다.
고쳐 쓰다: 파일이 있는 하위 디렉터리가 없으면 maxlength 1을 찾는 옵션을 추가할 수 있습니다. 그래서:
find . -type f -name 'diag*' -maxdepth 1 -mtime +30 -exec mv {} temp_diag \;
또는 하위 디렉터리가 있지만 temp_diag를 포함하지 않으려는 경우 다음을 수행하세요.
find . -path ./temp_diag -prune -o -print -type f -name 'diag*' -mtime +30 -exec mv {} temp_diag\;
답변2
귀하의 find
명령은 temp_diag 디렉토리로 이동하여 파일을 찾은 다음 mv
파일을 자체적으로 복사하려고 시도하는 것입니다.