[유닉스] 디렉토리 이름 변경 및 검색


디렉토리 이동과 이름 변경



mv

  • 디렉토리를 옮기거나 이름을 변경
  • 형식 : mv [directory] [target directory]
  • [directory]는 옮기거나 이름을 바꿀 디렉토리, [target directory]는 목적하고자 하는 디렉토리의 이름


디렉토리 이름 변경

  • source 디렉토리를 source_file로 이름 변경
$ mv source source_file
$


디렉토리 이동

  • [target directory]가 존재하지 않을 때
  • 디렉토리를 옮기는 기능과 이름을 바꾸는 두 가지 기능
$ ls
document source_file
$ mv source_file source
$ ls
document source
$
  • 현재 작업 디렉토리에 source 디렉토리가 없었으므로, mv 명령에 의해 source_file이 source로 디렉토리 이름이 바뀜

  • [target_directory]가 존재할 때
  • [directory] 자체를 [target_directory]로 옮기는 기능
$ pwd
/home/ksshin/Unix
$ ls
document source
$ mkdir backup
backup document source
$ mv document backup
$ ls
backup source
$ ls backup
document
  • backup이라는 디렉토리 생성 후 mv 명령어를 사용
  • document 디렉토리가 backup 디렉토리의 하위 디렉토리로 이동한 것
  • 즉, document 디렉토리는 “~/Unix/document”라는 경로에서 “~/Unix/backup/document”로 이동된 것
  • 만약 document 디렉토리 내에 doc1, doc2라는 두 개의 서브디렉토리를 가지고 있다면, 서브디렉토리까지 모두 옮겨지게 됨


파일과 디렉토리 검색


find 명령

  • 디렉토리에서 원하는 파일을 찾아줌
  • 형식 : find [path] [expression]
  • [path]는 검색을 시작할 위치를 지정하는 경로
  • [expression]은 검색 조건과 동작
  • [path]에 지정된 디렉토리에서 시작하여 서브디렉토리까지 검색


파일 검색

  • 파일 검색 결과를 화면에 출력하므로 –print 옵션은 생략해도 됨
$ find . -name mynote.txt
./temp/mynote.txt
$


와일드카드 사용

  • 와일드카드 사용시 작은따옴표로 묶어 주어야 파일명으로 인식
  • 현재 디렉토리 내에서 원하는 my로 시작되는 모든 파일을 찾는 명령
$ find . -name ‘my*.*-print
./temp/mynote.txt
./temp/work/prog/myprog.txt
./ksshin/Unix/ch2/source/mysource.c
$



파일 크기로 검색

  • -size 옵션 사용
  • 현재 디렉토리 내에서 my로 시작하는 파일 중 2000바이트 이하인 것을 찾는 명령
$ find . -name ‘my*.*-print -size -2000c
./temp/mynote.txt
$
  • -2000c에서 –2000은 2000보다 적은 수
  • “c“는 바이트(byte) 단위로 계산하라는 의미
  • 킬로바이트(KB) 단위는 “k”, “-2000c“는 “–2k“와 같은 의미


비어있는 파일 검색

  • -empty 옵션 사용
  • 현재 디렉토리에서 ‘.txt’로 끝나는 비어 있는 파일 검색
$ find . -type f -name*.txt’ -empty
./temp/mynote.txt
$


찾아낸 파일을 자동으로 삭제

  • -exec 옵션 사용
  • 비어 있는 파일을 찾아내고 자동 삭제
$ ls temp
mynote.txt work
$ find . -type f -name*.txt’ -empty -exec rm -f {} \;
$ ls temp
work
$
  • -exec와 \; 사이에 기술된 부분이 검색된 파일에 적용될 명령
  • 삭제하기 전에 파일을 하나씩 확인하고 싶으면 –exec 대신 –ok를 사용
  • 이후 물어볼 때 y 입력하면 파일이 삭제됨


find 결과를 파일로 저장

  • 서브디렉토리가 많을 경우 find 명령은 실행 시간이 오래 걸림
  • find 명령의 실행 결과를 화면에 출력하지 않고 파일로 저장하면 편리
$ find . -name mynote.txt > find_result
$
  • 결과 파일 확인
$ cat find_result
./temp/mynote.txt
$
  • 와일드카드를 사용하여 특정 문자를 포함한 파일 여러 개를 검색할 경우 실행 결과가 보이지 않고 커서만 깜박임.
  • 오래 기다리면 프롬프트가 뜨고 명령의 실행이 끝났음을 알려줌


출력 재지정 (리다이렉션, output redirection)

  • 출력의 방향을 바꾸는 것
  • 형식 : 명령 1> 파일명, 명령 > 파일명, 명령 » 파일명

  • 1은 표준 출력을 나타내는 파일 디스크립터이며 생략할 수 있음

  • 명령의 결과를 화면에 보여주는 대신 파일로 저장할 때 사용
  • 파일이 존재하지 않을 경우 새로 생성
  • 파일이 존재할 경우

  • 기존 파일의 내용을 없앨 때는 > 기호 사용
  • 기존 파일 뒤에 내용을 추가할 때는 » 기호 사용


출력 재지정 사용 예

  • 일반 명령의 결과를 파일에 저장
$ date > test
$ cat test
2015. 06. 01. () 10:11:56 KST
$
  • 편집기를 사용하지 않고 명령어 라인에서 간단한 텍스트 파일 만들기
$ cat > list1.txt
Hi !
This is the first list.
^D



$ cat > list2.txt
Hi !
This is the second list.
^D


$ cat list1.txt list2.txt > list3.txt
$ cat list3.txt
Hi !
This is the first list.
Hi !
This is the second list.
$
  • 파일이 존재할 때 출력 추가
$ cat >> list1.txt
Bye !
This is the end of the first list.
^D


$ cat list1.txt
Hi !
This is the first list.
Bye !
This is the end of the first list.
$


오류 재지정 (error redirection)

  • 표준 오류 메시지를 파일에 저장
  • 형식 : 명령 2> 파일명
  • 2는 표준 오류를 나타내는 파일 디스크립터이며 생략할 수 없음


오류 재지정 사용 예

  • ls 명령을 통해 /ttt 디렉토리가 존재하지 않는다는 오류 메시지 화면에 나타남
$ ls
list1.txt list2.txt list3.txt test
$ ls /ttt
ls: cannot access /ttt : No such file or directory
$
  • 출력 재지정 사용해도 오류 메시지는 화면에 출력됨
$ ls > ls.out
$ ls /ttt > ls.err
ls: cannot access /ttt : No such file or directory
$ cat ls.out
list1.txt
list2.txt
list3.txt
ls.out
test
$ cat ls.err
$
  • 오류 재지정을 하면 정상 결과는 화면에 출력, 오류 메시지만 파일로 저장됨
$ ls 2> ls.out
list1.txt list2.txt list3.txt ls.err ls.out test
$ ls /ttt 2> ls.err
$ cat ls.err
ls: cannot access /ttt : No such file or directory
$ cat ls.out
$


find 결과 오류 메시지 처리

  • 결과를 리다이렉션 했어도 화면에 출력되는 내용은 오류 메시지
$ cp mynote.txt /tmp
$ find /tmp –user $LOGNAME > my_tmp_file
find: ‘/tmp/ssh-BsH53yjociBb’ : Permission denied
$
  • find 명령의 올바른 결과는 my_tmp_file 파일에 저장됨

  • 오류 메시지만 파일에 저장

$ find /tmp –user $LOGNAME 2> error
/tmp/mynote.txt
$
  • 오류 메시지만 error 파일에 저장됨
  • ‘2>’에서 두 문자 사이에 공백 있으면 안 됨

  • 오류 메시지를 나중에 검토할 필요가 없고 화면에서 지워버리려고 하면, 저장 파일을 /dev/null로 지정
$ find /tmp –user $LOGNAME 2> /dev/null
/tmp/mynote.txt
$
  • 오류 메시지와 정상적인 검색 결과를 서로 다른 파일에 저장
$ find /tmp –user $LOGNAME 2> error > my_tmp_file
$ cat error
find: ‘/tmp/ssh-BsH53yjociBb’ : Permission denied
$ cat my_tmp_file
/tmp/mynote.txt
$