'리눅스복사'에 해당되는 글 2건

  1. 2018.02.01 리눅스 복사 프로그램(쉘스크립트)만들기
  2. 2018.01.31 cp를 이용한 폴더 복사
2018. 2. 1. 12:12

폴더를 다른 폴더로 백업 받아 놓으려고 하는데, 폴더별로, 어느정도 작업이 되고 있는지 보고 싶은데,


이게 용량이 몇테라씩 하다보니까, 하나끝내고 하나 끝내는거 


보고 있기가 너무 빡세서, 


그냥 쉘 스크립트로 만들었다.


먼저 


test, test2, test3 폴더 3개를  test_copied 폴더로 복사할꺼다.


$> cp -rv --preserve=timestamps /volume1/shared/test/test /volume1/shared/test/test_copied


$> cp [옵션]  [원본위치]  [복사될위치]


-r 은 하위폴더 포함이고,

-v 는 보기 좋게 나오는거고,

--perserve=simestamps 는 원본에 있는 생성 시간은 유지하고 복사하는거다.



먼저 복사를 원하는데 가서,



$ vi test.sh


를 쳐서 에디터로 들어간다.


/volume1/shared/test/test폴더를  /volume1/shared/test/test_copied 폴더로 복사할것이다.


i를 눌러서 편집 입력 모드로 만들고,


아래처럼 쓴다.


cp -rv --preserve=timestamps /volume1/shared/test/test /volume1/shared/test/test_copied

echo "Finish test1" >> cp_log.txt

cp -rv --preserve=timestamps /volume1/shared/test/test2 /volume1/shared/test/test_copied

echo "Finish test2" >> cp_log.txt

cp -rv --preserve=timestamps /volume1/shared/test/test3 /volume1/shared/test/test_copied

echo "Finish test3" >> cp_log.txt





먼저 test폳더 복사후 cp_log.txt에 "Finish Test1"이란 로그를 남겨 놓는다.

그다음에 test2폴더를 복사후 로그를 남기고, test3도 마찮가지이다.


$> echo "Finish test1" >> cp_log.txt


여기에서 echo는 문자 출력이고, >>는 cp_log.txt파일에 추가하라는 이야기다.( '>' 두개임)


여기에서 > 를 한번만 쓰면, 이전꺼는 지우고, 마지막 문자만 들어간다.



작성후, 'ESC'를 눌르고,   :wq 를 입력후 나온다.


그다음에 copy.sh를 실행하는 방법은 아래 3가지 방법이 있다.


$ ./copy.sh


$ sh copy.sh


$ bash copy.sh

난 개인적으로 ./copy.sh로 실행을 했다.


실행을 하면 권한이 없다는 말이 나올것이다.


그러면 아래와 같이 권한을 준다.


$ chmod 700 copy.sh

를 친다.



그다음에 다시



$ ./copy.sh

를 실행한다.


백그라운드로 작업하고 싶으면, 


$ ./copy.sh &

백그라운드 관련 포스터  http://tyson.tistory.com/88



하면 실행될 것이고 끝나면,


$ cat cp_log.txt

를 하면 어디까지 복사 됬는지 볼 수 있다.

Posted by Tyson
2018. 1. 31. 17:50

$> cp [옵션] [원본] [사본]



옵션


-a: 원본 파일의 속성, 링크 정보들을 그대로 유지하면서 복사한다.


-b: 복사할 대상이 이미 있을 경우 기존 파일을 백업하고 복사한다.


-d: 만약 복사할 원본이 심볼릭 링크일 때 심볼릭 자체를 복사한다.


-f: 만약 복사할 대상이 이미 있으면 강제로 지우고 복사한다.


-i: 만약 복사할 대상이 이미 있으면 사용자에게 물어본다.


-l: 하드링크 형식으로 복사한다.


-P: 원본 파일 지정을 경로와 같이했을 경우 그 경로 그대로 복사된다.


-p: 파일의 소유자, 그룹, 권한, 시간 정보들이 그대로 보존되어 복사된다.


-r: 원본이 파일이면 그냥 복사되고 디렉터리라면 디렉터리 전체가 복사된다.


-s: 파일을 심볼릭 링크 형식으로 복사한다. 원본 파일이름을 절대 경로로 지정해야 한다.


-u: 복사할 대상이 있을 때 이 파일의 변경 날짜가 같거나 더 최근의 것이면 복사하지 않는다.


-v: 복사 상태를 보여준다.


-x: 원본과 대상 파일의 파일시스템이 다를 경우에는 복사하지 않는다.


-R: 디렉터리를 복사할 경우 그 안에 포함된 모든 하위경로와 파일들을 모두 복사한다.



$> cp -r /data /data2


이렇게 하면 하위 폴더도 다 복사함.


근데, 소유자, 그룹, 시간등도 똑같이 복사, 또는 백업을 하고 싶으면, 

-a 를 붙이며 된다.


$> cp -ar /data /data2



* -p : 복사되어 새로 생성되는 파일이 원본파일과 동일한 모드, 소유자, 시간정보를 가지도록 하는 옵션이다.

       이 옵션은 바로위의 --preserve 옵션에서 mode,ownership,timestamps 3가지 속성을 동시에 지정한 것과 같다.

       즉, "--preserve=mode,ownership,timestamps" 를 사용한 것과 동일한 결과를 가진다.



근데, 나 같은 경우는 모드나, 소유자는 상관없고, 파일 생성일은 유지하고 싶어서,


--preserve 옵션을 사용했다.


$> cp -r --preserve=timestamps /data /data2



이렇게 하면, 복사 할때 넣는 사용자가 소유자로 들어가고, 생성 시간만 그대로 들어가기때문에,


다른곳에서 사용할때 권한때문에 막히는거 없이 사용가능하다.

Posted by Tyson