이것이 "파일 시스템 손상"의 종류 가 아님 을 이해하는 것이 중요합니다 fsck
. 파일 시스템에 관한 한, 단일 바이트가 0x00 (ASCII NUL, C 문자열 끝 마커) 또는 0x2F ( 디렉토리 분리 자) 값을 갖지 않는 한 파일 이름은 임의의 바이트 시퀀스 일 수 있습니다 /
. (파일 이름에 어떻게 든 00 또는 2F 바이트가 포함되어 있으면 fsck
수정해야합니다.)
오히려 응용 프로그램 소프트웨어 (Dolphin, ls
)에 "로케일"에 표시 할 수 없는 문자가 포함되어 있다고 생각 하는 파일 이름이 있으므로 자리 표시 자 문자로 대체합니다. 해당 문자를 입력 할 수 없으므로 파일을 조작하는 것이 더 어렵지만 이름을 입력하거나 복사하여 붙여 넣지 않고도 파일을 조작 할 수 있습니다. 예를 들어 Dolphin 내에서 문제 파일을 직접 삭제하거나 이름을 바꾸면 그냥 작동합니다 (작동하지 않으면 Dolphin의 버그입니다).
쉘에서 그들에 대해 무언가를해야하는 경우 (예를 들어, root
GUI 프로그램 이 소유 하고 따라서 GUI 프로그램으로 수정할 수없는 경우) "글로브"패턴을 사용하여 간접적으로 이름을 지정할 수 있습니다.이 패턴은 올바른 순서로 확장됩니다. 바이트 수와 함께 전달되었습니다.
물론, 글로브 패턴이 너무 일치하여 실수로 물건을 삭제하고 싶지 않으므로 Perl rename
유틸리티를 사용하여 각 파일 이름을 16 진수 인코딩으로 변환 하는 것이 좋습니다 .
$ rename '$_ = unpack("H*", $_)' *
이것은 정보 자체를 손상시키지 않습니다. 파일 자체도 아니고 파일 이름이 원래 엉망이되기 전에 인코딩 된 의미도 없습니다. 예를 들어 특정 파일의 경우에는 취소 할 수 있습니다.
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
주의 : 이름 rename
이 서로 다른 두 개의 프로그램이 있습니다. 위의 명령은 Perl에서 시작된 명령에서만 작동합니다. 우분투에서 원하는 것은 "util-linux"패키지가 아닌 "rename"패키지에있는 것입니다. rename -h
구별합니다 : 이것은 당신이 원하는 것입니다 ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... 이것은 당신이 원하는 것이 아닙니다 ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
중요한 것은 "perlexpr"입니다. 위의 모든 옵션을 이해하지 못하는 이전 버전의 Perl 이름 변경이있을 수 있지만, 내가 보여준 명령은 여전히 작동합니다.
편집 : 14.04 .5에서 포함 된 perl 스크립트 rename
는 -h 스위치를 지원하지 않습니다. 맨 페이지에 맨 페이지가 포함 man rename
되어 있는지 맨 페이지를 확인하여 올바른 것을 확인할 수 있습니다.
RENAME (1) Perl 프로그래머 참조 안내서 RENAME (1)