'사례 중복' 일괄 이름 바꾸기

'사례 중복' 일괄 이름 바꾸기

내 Linux 시스템에는 다른 컴퓨터(일부는 Windows 컴퓨터)와 교차 동기화되는 폴더가 있습니다. 문제는 폴더에 "중복된 대소문자" 파일이 있다는 것입니다. 즉, 하나 이상의 문자가 대문자와 소문자라는 점을 제외하면 파일 이름이 동일하다는 것입니다. 이는 Linux 시스템에서는 문제가 되지 않지만 Windows 시스템에서는 문제가 되며 파일 이름이 중복된다는 문제가 발생합니다.

"그 중 하나에 "1"이 추가된 동일한 이름의 두 파일이 생성되는 경우 모든 파일 이름을 소문자로 변환"과 같이 이러한 파일 이름을 찾고 바꾸는 간단한 명령줄 방법이 있습니까?

답변1

바퀴를 재발명하지 않으려면 mv명령의 내장 기능을 사용하여 자동 번호가 지정된 백업을 수행할 수 있습니다. 쉘이 기본적으로 대소문자 변환을 지원하는 경우 아마도 간단할 것입니다.

for f in *; do mv --backup=numbered -- "$f" "${f,,}"; done

기본 백업 번호 형식은 .~1~다음과 같습니다.

SOME FILE  sOmE fIlE  some file

그 다음에

$ for f in *; do mv -v --backup=numbered -- "$f" "${f,,}"; done
‘SOME FILE’ -> ‘some file’ (backup: ‘some file.~1~’)
‘sOmE fIlE’ -> ‘some file’ (backup: ‘some file.~2~’)
mv: ‘some file’ and ‘some file’ are the same file

기본 번호 지정이 마음에 들지 않으면 언제든지 변경할 수 있습니다. 시스템에 Perl 기반 rename명령이 포함되어 있으면 다음과 같이 보일 수 있습니다.

$ rename -v -- 's/\.~(\d+)~/$1/' *.~*~
some file.~1~ renamed as some file1
some file.~2~ renamed as some file2

마침내 주어진

$ ls
some file  some file1  some file2

관련 정보