나는 많은 하위 디렉터리를 포함하는 'main' 디렉터리를 가지고 있으며 이러한 하위 디렉터리 중 일부에는 콜론이 포함된 파일 이름이 있습니다. Linux에서 GitHub 저장소에 'main' 디렉터리를 업로드했지만 Windows 시스템에서 이 저장소에서 가져오려고 할 때 문제가 발생했습니다. Windows에서는 파일 이름에 콜론을 허용하지 않기 때문입니다.
Linux 터미널을 사용하여 'main' 디렉터리에서 콜론이 있는 모든 파일 이름을 반복적으로 찾은 다음 콜론을 대시(-) 문자로 바꾸려면 어떻게 해야 합니까?
답변1
find /path/to/directory -type f -name "*:*" -exec rename -n 's/:/-/g' {} +
(이 명령이 작동하지 않으면 이 답변 끝에 있는 호환성 참고 사항을 참조하세요.)
이것은 일어날 일만 인쇄하는 기본 안전 버전입니다. 실제로 이를 실현하려면 옵션을 제거하세요 -n
.
없어도 작동 -name "*:*"
하지만 변경해야 하는 파일 이름만 전달하는 것이 좋습니다. find
이렇게 하면 전체 명령이 더 빨라지기 때문입니다.
다음과 같이 작동합니다:
find
발견하다...- ...디렉토리에서
/path/to/directory
... - ...모든 파일(
-type f
)... - ...일치하는 이름(
-name "*:*"
),... - ...그런 다음 실행합니다
rename
(필요한 경우 여러 번)... - ...대체할 패턴
:
으로-
... - ...발견된 모든 파일에서 여러 파일을 동시에(
{} +
).
- ...디렉토리에서
노트:
- 이 명령은 디렉터리 이름을 바꾸지 않으며 이는 의도적으로 설계된 것입니다.
- 파일 이름에 일부 특이한 문자(예: 개행 문자)가 있으면 이름 바꾸기가 작동하지 않을 수 있습니다. 확실히 거기에는 그러한 파일 이름이 없으므로 이는 공식적인 참고 사항입니다.
호환성 참고
이 솔루션은 Debian, Ubuntu에서 사용 가능한 패키지 rename
의 Perl 스크립트를 사용합니다. rename
다른 배포판 rename
에는 util-linux
.
본 매뉴얼Perl이 아닌 경우의 솔루션은 다음 rename
과 같아야 한다고 제안합니다.
find /path/to/directory -type f -name "*:*" -execdir rename -n ':' '-' {} +
(다시 한 번 -n
올바르게 보이면 제거하십시오.) 그러나 이것을 테스트하지는 않았습니다. 파일 이름의 첫 번째 콜론만 대체할 것이라고 생각합니다. 해결 방법은 콜론이 더 이상 남지 않을 때까지 명령( 없이 -n
, 포함 )을 반복하는 것입니다.-v
또는 다음에서 사용 가능한 아카이브에서 Perl 스크립트를 얻을 수 있습니다.이 장소(현재 File-Rename-0.20.tar.gz
스크립트 이름은 입니다 rename.PL
). 또한보십시오이 질문.