bash script (backup)2021. 9. 24. 16:56

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/524868

 

find 명령에서 -maxdepth 옵션과 -mindepth 옵션을 사용하면 검색하는 디렉토리의 범위(깊이)를 조정할 수 있다. 깊이 0이면 시작하는 디렉토리 자체이다. 깊이 1이면 시작하는 디렉토리 내부의 파일/디렉토리를, 깊이 2이면 그 아래에 있는 하위 디렉토리 내부의 파일/디렉토리를 의미한다. 말로 설명하면 좀 복잡한데, 아래의 예시들을 보면 어느 정도 감이 잡힐 것이다.

# /tmp 디렉토리 및 하위의 파일/디렉토리 모두 출력

find /tmp

/tmp

/tmp/my_file.txt

/tmp/my_dir1/my_file1.txt

...

 

# /tmp 디렉토리만 출력

find /tmp -maxdepth 0

/tmp

 

# /tmp 디렉토리안에 있는 파일/디렉토리 출력, 하위 디렉토리는 제외(-maxdepth 1)

find /tmp -maxdepth 1

/tmp/my_file.txt

/tmp/my_dir1

...

 

# /tmp 디렉토리 안에 있는 파일(-type f)만 출력, 하위 디렉토리 제외

find /tmp -maxdepth 1 -type f

/tmp/my_file.txt

...

 

# 홈디렉토리를 제외하고 그 하위디렉토리부터(-mindepth 2) 검색

find ~/ -mindepth 2

/tmp/my_dir1/my_file1.txt

...

 

위의 예시에서 보듯이, 시작 디렉토리가 깊이 0, 그 아래의 파일/디렉토리가 깊이 1, 그 아래의 파일/디렉토리가 깊이 2 이런식으로 생각하면 된다.

 

디렉토리 구조가 복잡할 경우에 특정 범위의 항목에서만 파일이나 디렉토리를 검색할 수 있어서 매우 편리하다.

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2021. 3. 30. 17:24

 

반달가면 이글루에서 백업 - bahndal.egloos.com/509465

 

파일은 그대로 놔두고 특정 디렉토리 하위에 있는 디렉토리 구조를 다른 디렉토리 하위에 복사하는 방법이다. find 명령을 사용해서 복사할 수 있다. (find 명령에 대한 소개는 이전 게시물을 참고하자. 여기로)

 

~/temp1/src 하위의 디렉토리 구조를 ~/temp2/dst 디렉토리로 복사하는 경우를 생각해 보자. 복사하고자 하는 원래 디렉토리로 간 후에 find 명령을 이용해서 디렉토리 구조를 출력하도록 한 후, -exec 옵션을 통해서 해당 출력물을 mkdir 명령의 인자(argument)로 대응시킨다.

cd ~/temp1/src
find ./ -type d -exec mkdir -p ~/temp2/dst/{} \;

find ./ -type d 명령에 의해 하위 디렉토리명을 찾은 후, 해당 결과에 대하여 -exec 옵션을 통해 mkdir 명령을 실행한다. mkdir 명령에서 {} 이 부분에 find의 결과가 인자로 들어가게 된다. -exec 옵션에 지정된 명령의 종료 지점을 표시하기 위해 세미콜론(;)을 사용하는데, 셸(shell)에서 명령어 구분자로 해석하는 것을 방지하기 위해 이스케이프(escape) 캐럭터인 역슬래시(\)로 보호해 준다.

참고로 mkdir 명령에 -p 옵션을 주면 필요할 경우 상위 디렉토리도 생성하라는 의미가 된다. 아래의 예시를 보자.

# ~/dir1 디렉토리가 없는 상태에서 실행할 경우 오류 발생
mkdir ~/dir1/dir2

# ~/dir1 디렉토리가 없다면 먼저 ~/dir1 디렉토리를 만든 후 dir2 디렉토리 생성(-p 옵션)
mkdir -p ~/dir1/dir2

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 12. 2. 15:28

 

반달가면 이글루에서 백업 - bahndal.egloos.com/465115

 

조건에 맞는 파일을 찾아 특정 디렉토리로 복사를 하고 싶을 경우, find와 cp 명령을 xargs 명령으로 연결하면 되겠다.

파일을 찾기 위한 find 명령에 대한 내용은 이전 게시물을 참고하자.

 

우선 홈디렉토리(~/)에서 확장자가 txt인 파일을 찾는 예시를 보자.

 

find ~/ -type f | grep "\.txt$"

 

자, 이 결과를 가져와서 cp 명령을 실행해야 한다. 앞에 실행한 명령의 결과를 뒤에 실행할 명령의 인자(argument)로 넘겨주는 xargs 명령을 이용하는데, 한가지 유의할 점이 있다. 아래의 예시를 보자.

# txt 파일을 찾아 ~/Documents 디렉토리로 복사 (잘못된 시도)

find ~/ -type f | grep "\.txt$" | xargs cp ~/Documents

# 실패!

 

위와 같이 하면 제대로 복사가 되지 않는다. cp 명령에서 복사하려는 목적지 디렉토리와 앞의 find 명령에서 넘어온 파일 목록이 혼동되지 않도록 반드시 -t 옵션을 사용해야 한다. 제대로 된 예시는 아래와 같다.

 

# txt 파일을 찾아 ~/Documents 디렉토리로 복사(성공)

find ~/ -type f | grep "\.txt$" | xargs cp -t ~/Documents

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:32

 

반달가면 이글루에서 백업 - bahndal.egloos.com/363294

 

find와 grep을 이용해서 특정 디렉토리와 그 하위 디렉토리에서 특정 문자열이 포함된 파일을 찾을 수 있다. find 명령에 -type f 옵션으로 파일을 출력한 후 grep으로 찾으면 되겠다. 검색 범위는 지정한 디렉토리와 그 하위 디렉토리가 된다.

 

현재 디렉토리와 그 하위 디렉토리에서 myfile이라는 문자열이 포함된 파일을 찾으려면

find ./ -type f | grep "myfile"

 

/etc 디렉토리에서 찾으려면

find /etc -type f | grep "myfile"

 

그렇게 찾은 파일을 rm 명령으로 지우고 싶으면

find /etc -type f | grep "myfile" | xargs rm

 

또는 역따옴표(`)를 이용해서

rm `find /etc -type f | grep "myfile"`

 

디렉토리를 찾고 싶으면 -type d라고 지정하면 된다.

find ./ -type d

 

Posted by 반달가면

댓글을 달아 주세요