서버 역할을 하는 Mac Mini에 연결된 이전 DAS 드라이브에서 마이그레이션된 데이터 세트에 잘못된 폴더 이름(예: 콜론:)이 많이 포함되어 있는 문제가 발생했습니다. 일부 사용자가 이러한 파일을 만들었음에 틀림없으며, NAS를 통해 해당 파일을 마이그레이션할 수 있었고 Synology의 내장 파일 브라우저에 문제 없이 표시되었지만 Windows 또는 Mac 기반 클라이언트에서 해당 파일에 액세스할 때 폴더 이름이 자동으로 바뀌었습니다. 고유한 폴더 생성 이름.
저는 Linux 전문가가 아니기 때문에 누군가 Mac 컴퓨터에서 볼 수 있도록 이 폴더에서 :(콜론)을 제거하는 스크립트를 작성하는 데 도움을 줄 수 있는지 궁금합니다.
답변1
문제가 발생하는 경우에는 with 옵션을 사용하여 해당 문자를 다른 문자로 바꿀 :
수 있습니다 .find
rename
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
사용할 수 없지만 ( mksh
MirBSD 셸 및 Android의 셸) 또는 ksh93
(이 연산자는 실제로 ksh93에서 옴) 위와 같이 ${var//pattern/replacement}
교체하면 작동합니다. 와 동일합니다 .bash
ksh
zsh
/path/to/share/foo:bar
및 /path/to/share/foobar
디렉토리가 모두 존재하는 경우 실제로 는 로 이동 mv -i /path/to/share/foo:bar /path/to/share/foobar
됩니다 . GNU 구현을 사용하면 에 옵션을 전달하여 이를 피할 수 있습니다 . 이 경우 "예"라고 대답하고 비어 있으면 힌트 를 얻을 수 있습니다. 이름이 변경됩니다 (이전 이름은 삭제됩니다).foo:bar
foobar
mv
-T
mv
-i
mv: overwrite '/path/to/share/foobar'?
foobar
foo:bar
foobar
foobar