커맨드라인에서 파일을 제어해봅시다

요즘 근 3년 동안 쌓인 다운로드 폴더의 파일을 정리하고 있는데요. 생각이 난 김에 macOS 커맨드라인에서 파일 정리하는 법을 적어봅시다.

명령어 설명서 보기

man 명령어를 입력하면 됩니다. 여기서 설명하지 않은 나머지 플래그와 기능들에 대한 설명이 적혀 있습니다.


파일 보기

파일 보기는 ls 명령어로 합니다. list 로 기억하시면 좋습니다.

ls 디렉터리

[디렉터리] 에 아무것도 안 넣으면 현재 디렉터리의 항목을 보여줍니다.

파일의 세부 사항(최근 변경일이라든가 권한이라든가)을 보기 위해서는 -ㅣ 플래그를 붙여주면 됩니다.

ls -l [디렉터리]

파일 복사하기

파일 복사는 cp 명령어로 합니다. copy 로 기억하시면 좋습니다.

cp 복사_대상 복사_목적지

파일이 아닌 디렉터리는 -r 플래그를 주어야 합니다. recursive 로 기억하시면 됩니다.

cp는 기본적으로 알아서 덮어씌워버립니다. 그러니 이걸 원치 않을 때에는 -n 플래그를 지정해줍니다.


파일 이동하기

파일 이동은 mv 명령어로 합니다. move 로 기억하시면 좋습니다.

mv 이동_대상 이동_목적지

mv 명령어 역시 cp 와 마찬가지로 알아서 덮어씌워버립니다. 그러니 이걸 원칙 않을 때에는 cp와 마찬가지로 -n 플래그를 지정해줍니다.

이동 못하겠다고 뻗튕기더라도 강제로 옮기려면 -f 플래그를 지정해줍니다. -f-n 상호 간에는 나중에 지정된 플래그에 따라 명령이 수행됩니다.

-f와 -n이 충돌 시 상호 간 순서에 의해 결정됩니다.

파일의 이름명 변경도 mv 명령어를 사용합니다.


파일 링크하기

가끔 커맨드라인에서 작업하다보면 일일이 경로를 입력해서 찾아들어가기 귀찮은 경로가 있습니다. 그런 경우에는 ln 명령어를 사용하여 Symbolic link를 만들면 됩니다. link 로 기억하면 편합니다.

ln -s 원본_경로 링크가_있을_경로

-s 플래그가 없는 ln 명령어는 파일에 대해서만 동작합니다. 둘 다 만들어진 링크가 이동하는 경우에는 유효한 링크로 남으나 원본이 이동하는 경우에는 망가진 링크가 됩니다. Finder의 Aliases와 다른 종류의 링크에 대해서는 이 글을 참조하면 좋을 것 같습니다.


디렉터리 생성하기

디렉터리의 생성은 mkdir 명령어를 사용합니다. make directory로 기억하면 편합니다.

mkdir 디렉터리이름

파일 생성하기

파일의 생성은 touch 명령어를 사용합니다.

touch 파일명.확장자

파일 생성도 어쨌든 경로를 생성하는 것이기 때문에 확장자까지 입력해주어야 합니다.


파일 삭제하기

파일의 삭제는 rm 명령어를 사용합니다. remove로 기억하면 편합니다.

rm 파일명.확장자

디렉터리의 삭제는 -r 플래그를 줍니다.

디렉터리에 바로 rm하면 에러를 뱉습니다.

rm 명령어는 Finder의 삭제와 달리 파일을 바로 삭제하고 되돌릴 수 없기 때문에 유의해서 사용해야 합니다. 1


경로 내 파일 비교하기

두 개 경로의 내용물을 비교하고 싶을 수 있습니다. 최근 파일 정리하면서 가장 유용하게 써먹는 명령어 중 하나인데요. diff 명령어를 사용하면 됩니다. difference 쯤 되겠죠.

diff -rq 경로1 경로2

경로 병합하기

서로 다른 두 개 경로의 내용물을 비교했으면 경로에 있는 파일들을 병합하는 방법도 있겠습니다. ditto 명령어를 쓰면 됩니다.

ditto 원본1 [원본2 … 원본n] 병합본

여러 개 경로를 한 번에 병합할 수도 있습니다. 파일을 이동하는 것이 아니라 복사하는 것이기 때문에 병합하고 난 후에는 약간의 뒷정리가 필요할 수 있습니다.


와일드카드 사용하기

커맨드라인에서 파일을 다룰 때에는 와일드카드(*)를 사용할 수 있습니다.

예를 들어서 확장자가 있는 모든 파일을 files 디렉터리에 몰아넣으려고 한다면

mv *.* files/

처럼 하면 되는 것이죠.

macOS의 경우 동일한 이름의 파일이 있다면 뒤에 1, 2, 3을 붙이는 식으로 파일을 추가하게 되는데 이런 중복파일은

rm * 1.*

같은 식으로 지울 수 있습니다.


  1. Finder에서 삭제는 ~/.Trash 경로로 파일을 mv 하는 것이고 휴지통 비우기가 rm ~/.Trash/* 라고 이해하시면 됩니다.