더북(TheBook)

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까지 대·소문자를 섞어 쓴다거나 숫자와 영문자를 섞어 범위를 지정할 수 없다는 점입니다. [ ] 안에는 동일한 성질의 문자 범위만 지정할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.