
파일이 마지막으로 편집된 날짜를 기준으로 폴더의 파일을 어떻게 복사할 수 있나요? 내가 저장한 모든 파일을 복사하고 싶다고 가정해 보겠습니다.오늘 마지막으로 편집됨~에서씨:내 폴더로박. 어떻게 이를 달성할 수 있나요?
일반 복사 명령은 다음과 같이 수행할 수 있다는 것을 알고 있습니다.
cp source destination
예.
cp *.c bak
어떤 제안이 있으십니까?
답변1
find를 사용하면 마지막 날에 수정된 파일(및 파일만)을 다음 방법으로 찾을 수 있습니다.
find . -type f -mtime 1
그래서 당신은 그것을 복사 할 수 있습니다
find . -type f -mtime 1 -exec cp {} bak/ \;
의미: 현재 디렉터리( .
)에서 "파일" 유형( -type f
)의 모든 엔터티를 찾습니다.지금으로부터 최소 1일 후에 수정됨( -mtime 1
하지만 미묘합니다. 자세한 내용은 링크를 따르십시오.) 각 항목에 대해 명령을 실행한 cp
다음 이전 조건과 일치하는 파일 이름과 절 bak/
에 리터럴 --- exec
, 닫는 세미콜론( 쉘이 그것을 먹는 것을 피하기 위해 이스케이프됨) 명령을 닫고 추가로 명령이 일치할 때마다 한 번씩 실행된다는 것을 의미합니다.
디렉토리 트리는 폴더에서 평면화되므로 bak/
아카이브 형식을 사용하는 것이 더 나을 수도 있습니다.
예를 들어, 다음은 오늘 수정된 작업 디렉터리의 모든 파일과 이틀 이후의 tar 파일을 백업한 다음 해당 파일을 Dropbox 디렉터리로 이동하는 스크립트입니다.
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
zsh
제가 게으르고 의 배열 구조에 적응하려고 시도하지 않았기 때문에 필요합니다 bash
. 하지만 확실히 여기 누군가가 그렇게 할 수 있습니다(힌트, 힌트)...
답변2
먼저 명령을 사용하여 현재 폴더에서 마지막으로 수정한 파일을 지정할 수 있습니다.
ls -lt
또는 명령을 사용하여 마지막으로 액세스하는 파일을 지정하려고 합니다.
ls -ltu
그런 다음 명령을 사용하여 파일을 복사할 수 있습니다 cp
. 여러 파일을 복사하려면 다음을 참조하세요.이것.