[Linux] find로 특정파일이 특정 날짜 이후에 수정된것만 찾아 복사하기
리눅스에서 find 명령어를 사용하여 특정 날짜 이후에 수정된 .php 파일을 찾는 방법은 이렇다
이 find 명령어는 /path/to/search
디렉토리부터 하위 디렉토리까지 재귀적으로 검색하여,
.php로 끝나는 파일 중에서, '2023-02-01' 이후에 수정된 모든 파일을 찾는다.
find /path/to/search -name "*.php" -type f -newermt "2023-02-01"
-name
옵션은 어떤 확장자를 찾을 건가-newermt
옵션은 'modification time'보다 더 최근에 변경된 파일을 찾는 옵션
find
명령어로 찾은 파일을 rsync
로 다른 디렉토리로 복사하려면 아래와 같이
# 이렇게 하면 파일만 복사가 된다
find /path/to/search -name "*.php" -type f -newermt "2023-02-01" -exec rsync -avz {} /destination/path/ \;
# 디렉토리까지 복사를 하고 싶으면 아래와 같이 해야 함.
find /path/to/search -name "*.php" -type f -newermt "2023-02-01" > /root/files_to_copy.txt
rsync -avz --files-from=/root/files_to_copy.txt / /destination/path/
-exec
옵션은 find
명령어로 찾은 각 파일에 대해 지정된 명령어를 실행하라는 의미입니다.
이 경우 rsync -avz {} /destination/path/
명령이 실행되며, 여기서 {}
는 find
로 찾은 파일을 의미합니다.rsync -avz
옵션은 파일을 복사하면서 원본의 수정 시간, 권한 등의 정보를 유지(-a
), 상세 정보를 출력(-v
), 압축하여 전송(-z
)하는 것을 의미합니다.
-z 옵션은 압축이라서 붙이지 않아도 됩니다.
그리고 경우에 따라서 압축하는 시간 때문에 더 느린경우도 있고. 압축파일 압축하면 효율도 얼마 안되고
마지막으로 rsync 사용시에는 마지막에 / 붙여 주는 습관이 좋습니다. 명확하게 "디렉토리 안"이라는 의미
위 find로 찾은것에 대해 갯수가 적은 편이며 서로 다른 서버에 있는 파일의 날짜를 확인 하고 싶다면 아래를 참고 하세요~
# 단일 파일 여러개 - 아래를 스크립트로 만들어 출력해 보기
ls -al /root/1.txt | awk '{print $6,$7,$8,$9}'
ls -al /root/2.txt | awk '{print $6,$7,$8,$9}'
ls -al /root/3.txt | awk '{print $6,$7,$8,$9}'
# 파일목록을 가지고 있는 파일이 있을 경우 아래 처럼 한줄로 날짜 확인이 가능
cat files_to_copy.txt | while read file; do stat -c '%y %n' "$file"; done