mv: A와 B는 동일한 파일입니다.

mv: A와 B는 동일한 파일입니다.

5개의 .MOV 파일을 MOV라는 폴더로 이동하려고 합니다. find파일을 나열하고 파일을 이동하는 데 사용하는 것 mv:

$ mkdir MOV ; find . -type f -iname '*.MOV' -exec mv "{}" "MOV" \;
mv: './MOV/IMG_2391.MOV' and 'MOV/IMG_2391.MOV' are the same file
mv: './MOV/IMG_2395.MOV' and 'MOV/IMG_2395.MOV' are the same file
mv: './MOV/IMG_2401.MOV' and 'MOV/IMG_2401.MOV' are the same file

이것이 나에게 경고하는 이유를 이해하지 못했기 때문에 파일을 원래 위치로 다시 옮겼으며 이번에는 echo파일이 무엇을 하고 있는지 확인하고 싶었습니다.

$ mkdir MOV ; find . -type f -iname '*.MOV' -exec echo mv "{}" "MOV" \;
mv ./IMG_2391.MOV MOV
mv ./IMG_2394.MOV MOV
mv ./IMG_2395.MOV MOV
mv ./IMG_2400.MOV MOV
mv ./IMG_2401.MOV MOV

중복이 없어 좋네요.

대상 폴더의 이름을 MOV가 아닌 다른 이름으로 지정하면 더 이상 경고가 표시되지 않습니다. 또한 사용하면 -maxdepth 1경고 find가 없습니다 . 아니면 간단히 mv *.MOV MOV.

여기서 비슷한 질문을 찾았습니다.https://askubuntu.com/questions/1143012/why-do-i-get-x-and-y-are-the-same-file-when-using-mv-even-though-they-are-c하지만 그 대답은 문제를 설명하지 못하는 것 같았고, 응답자들도 나중에 우연히 그 문제를 발견했다고 말했습니다.

답변1

명령은 파일을 find현재 디렉터리에서 호출된 디렉터리로 이동합니다.MOV

명령을 작성한 방식에 따라 MOV디렉터리에서 파일도 찾고 일치하는 파일을 찾으면( MOV디렉토리가 확인할 첫 번째 디렉터리가 아니거나 명령을 여러 번 실행하는 경우 발생할 수 있음) 이미 있는 디렉터리로 이동해 보십시오. 그러면 표시되는 진단 메시지가 생성됩니다.

이 문제를 해결하려면 디렉터리 내부를 find보지 않도록 지시할 수 있습니다.MOV

find . -path ./MOV -prune -o -type f -iname '*.MOV' -exec mv {} MOV \;

이는 -path ./MOV -prune현재 경로 이름이 인지 테스트하고 ./MOV, 그렇다면 검색 경로에서 이를 제거하고 다음 디렉토리 항목을 계속 찾습니다. 그렇지 않은 경우( -o) 이전과 동일한 테스트 및 작업을 수행합니다.


mvGNU 도구를 사용하는 경우 가능한 한 적은 호출을 수행하여 작업 속도를 높일 수 있습니다.

find . -path ./MOV -prune -o -type f -iname '*.MOV' -exec mv -t MOV {} +

GNU 도구가 없으면 인라인 스크립트를 사용하여 동일한 유형의 최적화를 수행합니다.

find . -path ./MOV -prune -o -type f -iname '*.MOV' -exec sh -c 'mv "$@" MOV' sh {} +

원래 명령의 두 변형 모두에서 mv매번 단일 경로 이름으로 여러 번 호출되는 대신 배치 경로 이름으로 몇 번만 호출됩니다.

파일이 5개만 있는 경우 이러한 최적화는 큰 영향을 미치지 않지만, 파일이 수천 개 있는 경우 속도가 크게 향상될 수 있습니다.

관련 정보