다른 디렉토리에 있는 여러 파일의 이름 바꾸기

다른 디렉토리에 있는 여러 파일의 이름 바꾸기

저는 DSM 6.1+가 설치된 Synology NAS 서버에 약 5TB의 데이터를 저장하므로 bash는 해당 시스템에서 작동해야 합니다. 문제는 현재 이 데이터를 NTFS로 포맷된 외장 하드 드라이브에 보관하고 있다는 것입니다. 가장 큰 문제는 보관 프로세스 중에 일부 파일 충돌이 있는 것 같은데, Linux는 대소문자를 구분하지만 Windows는 그렇지 않습니다. 예를 들어:

테스트.txt

테스트.txt

Linux에서는 두 개의 별도 파일이지만 Windows에서는 이를 하나의 파일로 처리합니다.

문제는 과거에 사용한 도구를 사용하여 어떤 파일이 충돌하는지 알아낼 수 있어야 하는데 수동으로 이름을 바꾸기에는 파일이 너무 많다는 것입니다. 파일은 3~4개의 디렉터리 아래 여러 디렉터리에 분산되어 있습니다. 실제로 충돌이 있는 모든 파일을 찾을 수 있다면 파일 이름을 바꾸는 가장 쉬운 방법은 무엇입니까?

현재 위치에서 이동하지 않는 한 이름 지정은 실제로 중요하지 않습니다. 과거에는 이러한 충돌 중 일부 끝에 "1"을 추가했지만 앞서 말했듯이 이번에는 수백 개의 충돌이 있습니다.

이러한 파일 충돌을 찾는 데 권장되는 도구가 있습니까?

답변1

를 사용하여 현재 폴더와 하위 폴더에 있는 모든 파일 목록을 가져올 수 있습니다 find . | sort -f. 정렬에서는 이름이 같은(대소문자 무시) 파일이 서로 옆에 있도록 대소문자를 무시합니다. 예를 들면 다음과 같습니다.

./folder/dir/something/test
./folder/dir/something/TEST

이는 각 줄의 다음/이전 줄을 확인할 수 있는 Python과 같은 스크립트로 전달되어야 하며 일치하는 항목이 있으면 파일 이름을 바꾸거나 기본 저장소 등을 추가할 수 있습니다. 제 생각에는 이 문제를 해결하는 것이 그리 어렵지는 않을 것 같습니다.

편집하다:

#!/usr/bin/env python3

import sys

if __name__ == "__main__":
   old_line = ""
   cur_line = ""
   for line in sys.stdin:
      old_line = cur_line
      cur_line = line
      if old_line.lower() == cur_line.lower():
         print("Duplicate found!")
         print("File: {}".format(cur_line))

나는 그것을 이렇게 부른다:

find ../ | sort -f | ./rename_files.py
Duplicate found!
File: ../c/modern-approach/test

.라는 두 번째 파일이 있기 때문입니다 ../c/modern-approach/TEST.

관련 정보