728x90
디렉토리 이동과 이름 변경
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
$
728x90
'프로그래밍 > Unix' 카테고리의 다른 글
유닉스 복사, 삭제, 이동 (0) | 2020.03.23 |
---|---|
유닉스 파일 내용 보기 (0) | 2020.03.23 |
유닉스 디렉토리 생성, 삭제 (0) | 2020.03.23 |
유닉스 디렉토리 이동 (0) | 2020.03.23 |
유닉스 디렉토리 구조 (0) | 2020.03.22 |