Linux 파일 시스템 유형 중 하나를 사용하여 포맷된 외부 드라이브에 많은 사진이 포함된 큰 트리가 있습니다(어떤 유형인지 기억할 수 없음). 내 Mac에 설치되어 있고 사진을 복사하려고 하는데 "somePic.jpg" 및 "somePic.JPG"라는 파일이 있는 것 같습니다. 복사하려고 하면 OSX에서 이름이 중복된다고 불평하고 종료됩니다. 파일 이름이 고유한지 확인하면서 어떻게 복사할 수 있나요? OSX는 드라이브를 읽기 전용으로 마운트하기 때문에 먼저 소스 트리에서 중복된 항목의 이름을 바꿀 수 없습니다.
나는 몇 시간 동안 cp, gcp, sed 및 xargs를 가지고 놀았지만 아무 것도 작동하지 못했습니다.
답변1
...당신의 말에 따르면질문에 대한 의견...
pax -rws'/\.JPG$/.CAP&/' /root/of/copied/tree /dest/path
만약에.jpg
그리고.JPG
유일한 질문입니다. 그게 효과가 있을 것입니다.
또한 p
파일 이름 교체에 rint 기본 요소를 추가하여 변경된 모든 파일 이름 목록을 얻을 수도 있습니다.
pax -rws'/\.JPG$/.CAP&/p' /root/of/copied/tree /dest/path
내가 아는 한, pax
OSX 시스템에 이미 설치되어 있어야 하므로 전체적으로 스트레스가 없는 솔루션이 될 것입니다.
그러나 문제가 더욱 심각해지면 pax
지원에 관심이 있을 수도 있습니다...
-i
대화형으로 파일 이름이나 아카이브 멤버 이름을 바꿉니다. 패턴 피연산자와 일치하는 각 아카이브 구성원 또는 파일 피연산자와 일치하는 각 파일에 대해 파일 이름, 파일 모드 및 수정 시간을 묻는
pax
메시지가 표시됩니다 . 그런 다음 에서 한 행을 읽습니다 . 이 줄이 비어 있으면 파일 또는 아카이브 멤버를 건너뜁니다. 행이 단일 마침표로 구성된 경우 파일 또는 아카이브 멤버는 이름을 수정하지 않고 처리됩니다. 그렇지 않으면 해당 이름이 해당 줄의 내용으로 대체됩니다. EOF가 있는 경우 0이 아닌 종료 상태로 즉시 종료됩니다./dev/tty
pax
/dev/tty
pax
(CTRL+D
)응답을 읽는 동안 문제가 발생했거나/dev/tty
읽기 및 쓰기 작업을 열지 못했습니다.
답변2
다음은 간단한 애타게입니다.
# for f in $( find yoursourcedirectory -name \*.jpg ) ; do cp ${f} yourtargetdirectory/${f}.CAP1.jpg ; done
그 다음에
# for f in $( find yoursourcedirectory -name \*.JPG ) ; do cp ${f} yourtargetdirectory/${f}.CAP2.jpg ; done
이렇게 하면 소스에서 *.jpg라는 이름의 모든 파일을 가져와 *.CAP1.jpg로 복사하고 모든 *.JPG 파일을 *.CAP2.jpg로 복사합니다.
또 다른 방법은 diffmerge를 사용하는 것입니다. https://sourcegear.com/diffmerge/
또 다른 방법(파일이 많은 경우 동일한 이름으로 시도)은 각 파일에 임의의 이름을 할당하는 것입니다.
# for f in $( find yoursourcedirectory -iname \*.JPG ) ; do cp ${f} yourtargetdirectory/$(dd if=/dev/random count=20 2>&1 /dev/null |md5).jpg ; done
(-iname 스위치를 사용하면 검색 시 대소문자를 구분하지 않으므로 *.JPG와 *.jpg가 모두 검색됩니다.)