잘못된 문자가 포함된 파일/폴더 이름을 변경하는 스크립트(Synology NAS)

잘못된 문자가 포함된 파일/폴더 이름을 변경하는 스크립트(Synology NAS)

서버 역할을 하는 Mac Mini에 연결된 이전 DAS 드라이브에서 마이그레이션된 데이터 세트에 잘못된 폴더 이름(예: 콜론:)이 많이 포함되어 있는 문제가 발생했습니다. 일부 사용자가 이러한 파일을 만들었음에 틀림없으며, NAS를 통해 해당 파일을 마이그레이션할 수 있었고 Synology의 내장 파일 브라우저에 문제 없이 표시되었지만 Windows 또는 Mac 기반 클라이언트에서 해당 파일에 액세스할 때 폴더 이름이 자동으로 바뀌었습니다. 고유한 폴더 생성 이름.

저는 Linux 전문가가 아니기 때문에 누군가 Mac 컴퓨터에서 볼 수 있도록 이 폴더에서 :(콜론)을 제거하는 스크립트를 작성하는 데 도움을 줄 수 있는지 궁금합니다.

답변1

문제가 발생하는 경우에는 with 옵션을 사용하여 해당 문자를 다른 문자로 바꿀 :수 있습니다 .findrename

find /path/to/share -name "*:*" -exec rename 's/\:/_/' {} \;

아직 테스트해 본 적이 없으므로 먼저 샘플 데이터에서 시도해 보세요.

답변2

bash이 시스템에서 사용 가능한 경우 :

LC_ALL=C find /path/to/share -depth -name '*:*' -type d -exec bash -c '
  for file do
    base=${file##*/}
    mv -i "$file" "${file%/*}${base//:}"
  done' bash {} +

:디렉토리 이름의 s는 제거되어야 합니다 .

bash사용할 수 없지만 ( mkshMirBSD 셸 및 Android의 셸) 또는 ksh93(이 연산자는 실제로 ksh93에서 옴) 위와 같이 ${var//pattern/replacement}교체하면 작동합니다. 와 동일합니다 .bashkshzsh

/path/to/share/foo:bar/path/to/share/foobar디렉토리가 모두 존재하는 경우 실제로 는 로 이동 mv -i /path/to/share/foo:bar /path/to/share/foobar됩니다 . GNU 구현을 사용하면 에 옵션을 전달하여 이를 피할 수 있습니다 . 이 경우 "예"라고 대답하고 비어 있으면 힌트 를 얻을 수 있습니다. 이름이 변경됩니다 (이전 이름은 삭제됩니다).foo:barfoobarmv-Tmv-imv: overwrite '/path/to/share/foobar'?foobarfoo:barfoobarfoobar

관련 정보