Linux 학습 작업 - 휴지통 설정

Linux 휴지통 – 셸 스 크 립 트 로 간단 한 휴지통 만 들 기
만족 이 필요 한 요구
  • 스 크 립 트 작성 – myrm. sh, 파일 삭제, 휴지통 기능, 삭 제 된 파일 저장/my백업 디 렉 터 리 아래;
  • 파일 삭 제 를 복구 할 수 있 는 스 크 립 트 myback. sh, 삭 제 된 파일 을 원래 경로 로 복원 할 수 있 습 니 다.

  • 먼저 스 크 립 트 삭제 생각 – my rm. sh 의 제작
  • 이 요 구 는 파일 을 삭제 해 야 하 는 것 처럼 보이 지만 실제 작업 은 현재 폴 더 에서 삭제 하고 싶 은 파일 을/my 로 이동 하 는 것 입 니 다.back 디 렉 터 리 아래
  • 이 요 구 는 mkdir, mv 두 문장 을 통 해 이 기능 을 실현 할 수 있다
  • 여기까지 생각하면 스 크 립 트 코드 를 쓸 수 있 을 것 같 아 요.
    #!/bin/bash
    # mkdir              
    mkdir /my_backup
    #   mv                             
    #      $*              ,           
    mv $* /my_backup
    #       ls             
    ls /my_backup
    

    이 곳 은 mkdir 문 구 는 이미 이 폴 더 가 있 는 상황 에서 불필요 하 다 는 것 을 고려 하여 위의 코드 를 개량 하고 싶 습 니 다. 폴 더 가 이미 존재 하 는 상황 에서 mkdir 문 구 를 사용 하지 않 으 면 어떻게 합 니까?(묻 지 마 세 요. 처녀자리 라 고 물 어보 세 요) 이 럴 때 test 방법 으로 파일 이 존재 하 는 지 테스트 할 수 있 습 니 다. test 문 구 를 간단하게 보충 할 수 있 습 니 다.
    test -d /bin/lianxi  #      bin             lianxi     
    
    [ -d /bin/lianxi ] #            ,        
    
    test -f /etc/passwd  #      etc             passwd   
    
    [ -f /etc/passwd ] #            
    

    상기 문장 으로 판단 하면 반환 값 ($?) 이 0 일 때 이 파일/폴 더 가 존재 한 다 는 것 을 증명 하고, 다른 상황 은 이 파일/폴 더 가 존재 하지 않 는 다 는 것 을 설명 합 니 다.
    따라서 이 문장 에 if - then - else - fi 의 프로 세 스 제어 문장 을 더 하면 코드 개량 을 완성 할 수 있다.
    #!/bin/bash
    if [ -d /my_backup ]  #   , /my_backup                 mkdir    ,         !
    then
    	mv $* /my_backup
    	ls /my_backup
    else
    	mkdir /my_backup
    	mv $* /my_backup
    	ls /my_backup
    fi
    

    그리고 복구 스 크 립 트 를 생각 하기 시작 합 니 다 – myback. sh 의 제작
  • 스 크 립 트 제작 을 시작 할 때 이런 목적 을 달성 할 수 있 는 방법 을 먼저 생각해 야 한다.
  • 가장 쉽게 생각 나 는 것 은 로그 파일 입 니 다. 기록 로 그 를 삭제 할 때마다 복원 한 후에 로 그 를 삭제 하 는 방식 으로 복원 작업 을 완성 할 수 있 습 니 다.
  • 로그 파일 에 기록 해 야 할 내용: 파일 이름과 원래 저장 경로.

  • ok, 생각 한 후에 실천 을 시작 합 니 다. 먼저 위의 삭제 스 크 립 트 – my rm. sh 를 수정 하고 로그 에 저 장 된 문 구 를 추가 합 니 다.
    #!/bin/bash
    if [ ! -d /my_backup ]  #                      !
    then
    	mkdir /my_backup
    	touch /my_backup/logging.txt
    else
    	touch /my_backup/logging.txt
    fi
    #      for        ,            
    for temp in $*
    do
    	a=$(find / -name $temp)
    	echo $temp $a >> /my_backup/logging.txt
    done
    #       mv   ,       
    mv $* /my_backup
    
    ls /my_backup
    

    복구 스 크 립 트 쓰기 시작
  • 인 자 를 받 습 니 다 – 복구 하고 싶 은 파일 이름;
  • 로그 파일 에서 복구 하고 싶 은 파일 의 파일 이름 을 찾 아 복구 합 니 다.
  • 복구 가 완료 되면 로 그 를 삭제 해 야 합 니 다. 그렇지 않 으 면 다음 에 같은 파일 을 복원 하 는 데 오류 가 발생 할 수 있 습 니 다.
  • #!/bin/bash
    
    #    for        ,        
    for temp in $*
    do
    	a_path=$(cat /my_backup/logging.txt|grep $temp|awk '{print $2}')
    	a_num=$(cat /my_backup/logging.txt|grep -n $temp|awk -F':' '{print $1}')
    	mv /my_backup/$temp $a_path
    	sed -i "${a_num}d" /my_backup/logging.txt
    done
    
  • 위의 my rm. sh 와 my 를 통 해back. sh 는 이런 간단 한 휴지통 의 효 과 를 얻 을 수 있다.
  • 그리고 문 구 를 사용 할 수 있 습 니 다. chmod + x 스 크 립 트 파일 이름 은 스 크 립 트 파일 에 실행 가능 한 권한 을 부여 합 니 다.
  • alias 문 구 를 사용 하여 rm 에 별명 을 설정 하면 rm 문 구 를 사용 하여 파일 을 삭제 하고 휴지통 을 설정 하 는 효과 가 있 습 니 다.

  • 마찬가지 로 이 간이 휴지통 에는 다음 과 같은 문제 가 존재 한다.
  • 동명 의 서 류 를 만나면 눈 이 멀다.
  • 복구 할 때 if 를 추가 하 는 프로 세 스 통 제 를 고려 하여 판단 할 수 있 습 니 다. 대상 파일 이 존재 하면 복구 하고 존재 하지 않 으 면 복구 하고 자 하 는 파일 이 존재 하지 않 음 을 알려 줍 니 다.

  • 지금 이런 문제 가 존재 하 죠? 뒤의 학습 과정 에서 개선 을 시도 할 수 있 습 니 다. 더 좋 은 생각 이 있 으 면 함께 교류 할 수 있 습 니 다!

    좋은 웹페이지 즐겨찾기