작년에 3개월 간 우분투를 사용한 적이 있었다. 12.04 LTS가 막 나와서 흥분해서 깔았었는데 한국 온라인 게임이 안되서 다시 윈도우로 갈아탄 기억이 갑작스레 나는데, 중요한건 게임 때문에 윈도우로 갈아탔다는 게 아니다. 우분투는 어디선가 LAMP라는 말을 주워듣고 "아! 이거면 엄청나게 빠르고 좋은 사이트를 운영할 수 있을거야!"라는 생각을 하고 설치했었다. 그게 동기다. 단순한 욕구.

욕구를 절제하지 못하고 우분투를 설치하고 제대로된 사이트를 운영하겠다고 다짐한 나는, osu! 비트맵 미러의 데이터 준비를 위해 php로 파일을 다운로드하는 프로그램을 작성하고 테스트하고있었다.

100여개의 데이터 준비를 마치고 안녕히 계시는지 확인하기 위해 터미널에 ls를 입력했다.

$ ls
71255 sakuzyo - ChaiN De/
$
$ ls
71255 sakuzyo - ChaiN De/

71255 sakuzyo - ChaiN De/structioN (siilento's solid remix).osz 가 나올터인 ls의 결과는 뭔가 이상했다.

$ cd 71225*
$ ls
structioN (siilento's solid remix).osz

그랬다. "/"를 디렉터리 구분자로 인식한 것이다. 젠장할..

다음부터는 이런 실수를 미연에 방지하려고 윈도우 탐색기 이름바꾸기로 "/"를 입력해가며 파일, 폴더 명이 될 수 없는 특수문자들을 정리했는데, 다음과 같다.

\ / : * ? " < > |

이 문자들을 프로그램적(programmatically)으로 제거하려면 php는 다음과 같은 함수를,

function stripFileName($name) {
	return preg_replace('/[\\\\\/:*?"<>|]/', '_', $name);
}

C#은 다음과 같은 메서드를 사용하면된다.

public static string StripFileName(string name) {
	return System.Text.RegularExpressions.Regex.Replace(name, "[\\\\/:*?\"<>|]", "_");
}
public static string StripFileName(string name) {
	foreach(var ch in System.IO.Path.GetInvalidFileNameChars()) {
		name = name.Replace(ch, '_');
	}
	return name;
}
저작자 표시 비영리
신고

Name __

Password __

Link (Your Website)

Comment