Q 파일 이름을 대체하는 *
A 임의의 문자를 대체하는 메타 문자(meta characters)입니다. Weapon 디렉터리로 파일들을 이동해야 하는 상황을 가정해 봅시다.
supreme@master:~$ ls
q3_Gauntle q3_Machine_Gun q3_Shotgun q3_Grenade_Launcher q3_Rocket_Launcher Weapon
q3_Rail_Gun q3_Plasma_Gun q3_Lighting_Gun q3_Flame_Thrower q3_BFG
파일 하나씩 이동하려면 열 번의 노력이 필요합니다. 이동할 파일이 모두 q3_로 시작하기 때문에 모든 문자를 대체하는 메타 문자 *를 써서 다음과 같이 명령 한 번으로 파일을 옮길 수 있습니다.
supreme@master:~$ mv q3_* Weapon
*가 모든 문자를 대체하는 반면 메타 문자 ?는 정확히 1개의 문자만 대체합니다. ‘a*b’는 a로 시작하여 b로 끝나는 모든 이름을 대체하지만, ‘a?b’는 a로 시작하고 중간에 임의의 문자 하나가 있으며 b로 끝나는 파일을 의미합니다. 다음 명령의 결과를 살펴봅시다. a*b는 aandb와 anb 둘 다 검색해 내지만 a?b는 aandb는 검색하지 않고 anb만 검색할 것입니다.
supreme@master:~$ find -name a*b supreme@master:~$ find -name a?b
[ ]는 괄호 안에 있는 문자를 대체합니다. [A,B,C] _number는 A나 B 또는 C로 시작되고 _number로 끝나는 파일 이름 A_number와 B_number, C_number를 검색할 것입니다.
supreme@master:~$ find -name [A,B,C]_number
[ ] 안에 -를 이용해서 대체할 영문자나 숫자의 범위를 지정할 수 있습니다. 이를테면 number[0-9]는 number로 시작해서 0부터 9까지 숫자가 붙는 문자인 number0, number1, …, number9에 대응합니다. 같은 원리로 문자에 적용한다면 [A- C]number는 [A,B,C]number처럼 사용할 수 있습니다.
supreme@master:~$ find -name number[0-9] supreme@master:~$ find -name [A-C]number
이때 주의할 것은 [ ] 안에 범위를 지정할 때 (모든 영문자라는 의미에서) a-Z까지 대·소문자를 섞어 쓴다거나 숫자와 영문자를 섞어 범위를 지정할 수 없다는 점입니다. [ ] 안에는 동일한 성질의 문자 범위만 지정할 수 있습니다.