Linux 디렉토리에서 새 파일을 선택하거나 찾는 방법

Linux 디렉토리에서 새 파일을 선택하거나 찾는 방법

scp를 사용하여 서버에서 1개의 디렉터리를 백업하고 싶습니다. 하지만 내 문제는 백업 디렉터리에 파일(이전 파일과 새 파일)이 너무 많다는 것입니다. .

파일 1 - 최종 수정 날짜: 2022-10-11

파일 2 - 최종 수정 날짜: 2022-10-12

파일 3 - 최종 수정 날짜: 2022-10-13

파일 4 - 최종 수정 날짜: 2022-10-14

그렇다면 어떻게 find 명령을 사용하여 파일 4만 선택할 수 있습니까? 새 파일을 선택하면 | 및 scp 명령을 사용하여 새 파일만 복사할 수 있다고 생각했기 때문입니다. 매우 감사합니다

답변1

zsh 쉘 사용:

scp ./file*(.om[1]) host:target/dir/

scp현재 작업 디렉토리 .의 이름은 file.

GNU 유틸리티와 Bourne과 유사한 셸을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

{
  {
    LC_ALL=C find . -maxdepth 1 -name 'file*' -type f -printf '%T@\t%p\0'  |
      LC_ALL=C sort -z -k1,1rn |
      head -zn1 |
      cut -zf2-
  } 4<&- |
    xargs -0a /dev/fd/3 -I FILE scp FILE host:target/dir/ 3<&0 <&4 4<&- 
} 4<&0

(검증되지 않은).

BSD/GNU를 사용하여 현지 시간 2022-10-14T00:00:00 이후 마지막으로 수정된 파일을 선택하려면 다음을 수행하세요 find.

LC_ALL=C find . -maxdepth 1 -name 'file*' -type f -newermt 2022-10-14 \
  -exec sh -c 'exec scp "$@" host:target/dir/' sh {} +

또는 다음을 사용하여 zsh:

autoload after
scp ./file*(.e['after 2022-10-14']) host:target/dir/

( finds 와는 반대로 -newermt2022-10-14T00:00:00.000000000에서 수정된 파일도 전송합니다.)

하위 디렉터리의 파일도 고려하려면 에서 제거 -maxdepth 1하거나 ./file로 바꾸세요 . 숨겨진 디렉터리의 파일도 고려 됩니다. 이 동작도 원하면 glob 한정자를 추가하세요. 숨겨진 디렉터리 제외는 호출 이름이 다음으로 시작하는 디렉터리(여기서는 시작 디렉터리) 이외의 디렉터리 입니다../**/filezshfindDzshfind-prune..LC_ALL=C find . -name '.?*' -prune -o ...

답변2

find명령에는 시간별로 파일을 검색하는 기본 제공 옵션이 있습니다.

마침내쓰다시간 (나는 좋아한다개정하다):
find . -mtime n

마침내읽다시간(예:사용할 권리):
find . -atime n

  • +n~을 위한N일 이상
  • -n~을 위한N일 이하
  • n단지N하늘

완전한 예:

find . -mtime +6 -type f

현재 디렉터리와 그 하위 디렉터리에서 7일 이상 수정된 모든 파일을 찾습니다.

추가 정보여기.

답변3

이는 마지막 파일 찾기에 대한 특정 질문에 대한 답변은 아니지만 백업 목적으로 rsync대신 사용하는 것이 좋습니다 scp.

매뉴얼 페이지에서 rsync(1):

rsync는 scp와 거의 동일한 방식으로 작동하지만 더 많은 옵션이 있고 rsync 원격 업데이트 프로토콜을 사용하여 성능을 크게 향상시키는 프로그램입니다. 대상 파일이 이미 존재하는 경우 파일 전송 속도를 높입니다.Rsync가 널리 사용됩니다.백업 및 미러링용일상적인 사용을 위한 향상된 복사 명령으로 사용됩니다.

Rsync는 기본적으로 "빠른 확인" 알고리즘을 사용하여 전송해야 할 파일을 찾습니다.크기나 마지막 수정 시간이 변경된 파일을 찾습니다.빠른 검사 결과 파일의 데이터를 업데이트할 필요가 없음이 나타나면, 유지된 다른 속성(옵션에서 요청한 대로)에 대한 모든 변경 사항이 대상 파일에 직접 적용됩니다.

현재 작업 디렉토리를 대상 호스트에 복사하는 예:

rsync -avz ./ host:target/dir
  • -a- 보관 모드. 이는 권한, 소유자, 그룹 및 수정 시간을 유지하면서 전체 폴더를 반복적으로 복사한다는 의미입니다.
  • -v- 자세한 내용을 늘립니다. 그러면 실제로 복사된 파일이 표시됩니다.
  • -z- 전송되는 데이터 부분의 크기를 줄이기 위해 전송 중에 파일 데이터를 압축합니다.

관련 정보