![USB 장치에서 HDD로 복사된 파일 이름은 모두 대문자로 표시됩니다. 어떻게 고치나요?](https://linux55.com/image/41392/USB%20%EC%9E%A5%EC%B9%98%EC%97%90%EC%84%9C%20HDD%EB%A1%9C%20%EB%B3%B5%EC%82%AC%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%80%20%EB%AA%A8%EB%91%90%20%EB%8C%80%EB%AC%B8%EC%9E%90%EB%A1%9C%20%ED%91%9C%EC%8B%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EA%B3%A0%EC%B9%98%EB%82%98%EC%9A%94%3F.png)
현재 OpenBSD 버전 5.5를 사용하고 있습니다.
USB 장치에서 로컬 하드 드라이브로 파일이나 디렉터리를 복사할 때마다 복사된 파일 이름이 대문자가 됩니다.
원인은 무엇입니까?
어떻게 해결할 수 있나요?
답변1
FAT32 파일 시스템을 사용하고 있다고 말씀하셨습니다. FAT와 NTFS는 모두 대소문자를 구분하지 않는 파일 시스템입니다. 나는 드라이버가 동일한 이름을 가진 >1개의 파일이 디렉터리에 존재하지 않도록 하기 위해 대문자만 사용한다고 가정합니다(대소문자는 다르지만).
귀하가 설명하는 문제는 한동안 존재했습니다. 바라보다이 스레드예를 들어 2008년부터요.
FAT/NFTS 드라이브에서 다른 FS를 사용하거나 TAR 아카이브를 사용하여 대소문자를 보존하는 것이 좋습니다.
답변2
다음 명령을 사용하여 문제가 발생할 때마다 수정할 수 있습니다.
find local_directory_name -depth -exec sh -c 'dir="$(dirname "$0")"; FILE="$(basename "$0")"; lowfile="$(echo "$FILE" | tr "A-Z" "a-z")"; if [ "$lowfile" != "$FILE" ]; then mv "$0" "$dir/$lowfile"; fi' {} ";"
모든 내용을 한 줄에 입력하세요( local_directory_name
파일을 복사한 디렉터리 이름으로 바꾸세요). 백슬래시를 삽입하여 여러 줄로 나눌 수 있습니다. 또는 후반부를 sh -c
스크립트 파일에 넣을 수도 있습니다.
이는 디렉터리(하위 디렉터리 포함)의 모든 파일을 재귀적으로 열거하고 각 파일에 대해 지정된 명령을 실행합니다.
-depth
"상향식"으로 작동하도록 하여 디렉터리 자체를 처리(이름 바꾸기)하기 전에 디렉터리의 모든 항목을 처리하도록 합니다. 각 파일 이름(다음으로 시작하는 상대 경로)로컬 디렉토리 이름)은 디렉토리 부분과 일반 파일 이름(하단 구성 요소)으로 구분됩니다. 그러면 파일 이름이 대문자에서 소문자로 변환됩니다. 기존 파일 이름과 다를 경우 파일 이름은 소문자로 변경됩니다. 파일 이름을 자체적으로 바꾸려고 시도하여 진단 메시지를 받는 것을 방지하기 위해 이 검사를 추가했습니다. 이는 파일 이름에 문자가 포함되지 않은 경우(예: 숫자와 특수 문자만) 발생할 수 있습니다. 또는 이름에 아무것도 포함되지 않은 파일이 있는 경우수도편지.
사후 고려: 오류를 방지하는 또 다른 방법은 mv 123 123
after를 추가하는 것입니다. 이는 적어도 하나의 대문자가 포함된 프로세스 이름에만 지시합니다.-name "*[A-Z]*"
-depth
find