특정 디렉터리의 파일 목록에서 최신 파일을 가져와야 합니다.
처음 스크립트를 실행했을 때 특정 디렉터리의 파일 목록을 다른 디렉터리로 복사했습니다.
두 번째 실행부터는 동일한 디렉터리에 있는 파일 목록에서 최신 파일을 가져와 해당 파일을 다른 디렉터리에 복사해야 합니다.
첫 번째 실행에서는 마지막 파일의 생성 날짜를 변수에 캡처했으며, 스크립트가 두 번째 실행될 때 파일은 첫 번째 실행의 마지막 파일 생성 날짜보다 이후에 복사되어야 했습니다. 다른 디렉토리 .
누구든지 최신 파일을 구하도록 도와주실 수 있나요?
답변1
ls -t1 | head -n 1
첫 번째 항목은 액세스 시간별로 정렬된 모든 파일을 나열하고, 후자는 첫 번째 행을 선택합니다.
답변2
zsh에서 현재 디렉토리의 최신 파일은 다음과 같습니다.
a=(*(om[1]))
latest_file=$a[1]
cp -p $latest_file /other/directory
(글로벌 예선훌륭하지만 불행하게도 요소 하나만 요청하더라도 결과는 여전히 목록이므로 임시 배열입니다 a
. )
다른 쉘에서 파일 이름에 줄 바꿈이나 인쇄할 수 없는 문자가 포함될 수 없다는 것을 알고 있는 경우 다음을 사용할 수 있습니다 ls
.
latest_file=$(ls -t | head -n 1)
cp -p "$latest_file" /other/directory
그런데 실제로 요구하시는 것은 특정 파일보다 최신의 파일 목록인 것 같습니다. 이를 위해 -cnewer
내장 기능을 사용하여 find
다른 특정 파일보다 최근에 내용이나 메타데이터가 변경된 파일을 감지할 수 있습니다. 여기서 내가 부르는 방식은 find
하위 디렉터리의 파일도 수집한다는 점에 유의하세요.
find . -cnewer "$previous_latest_files" -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
이전 최신 파일을 검색하는 데 문제가 남아 있습니다. 사실 중요한 것은 복사본 날짜입니다. 따라서 복사 시 태그 파일이 생성됩니다.
find . -cnewer marker_file -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
touch marker_file
파일이 대상 디렉터리에 남아 있으면 두 디렉터리를 간단히 동기화할 수 있습니다. 대상 디렉터리에서 일부 오래된 파일을 삭제했지만 여전히 원본 디렉터리에 남아 있는 경우 이 방법을 사용하여 다시 복사됩니다.
rsync -a . /other/directory/
답변3
수정 시간을 기준으로 한 디렉터리에서 다른 디렉터리로 파일을 복사하는 경우 다음 rsync
과 같은 작업을 수행하는 매우 간단한 방법을 고려할 수 있습니다.
rsync -t ./dir1/ ./dir2/
아니면 다음을 추가하여 어떤 작업을 수행할지 확인하세요.
rsync -t --list-only ./dir1/ ./dir2/
-t
Gilles가 아래 설명에서 지적했듯이, 이 옵션을 사용하지 못하게 하는 참작이 가능한 상황이 있을 수 있습니다. 하지만 그것에서 무엇이든 빼앗는다면 그것은 바로 당신이다할 수 있는그리고테스트해야한다rsync
이 옵션은 원하는 결과를 얻는 --list-only
매우 간단한 방법입니다 .
또한 어쩌면...
man rsync
답변4
실제 목표가 수정 시간을 기준으로 여러 파일을 이동하는 것이고 시스템 버전이 테스트 유형을 find
지원하는 경우 -newerXY
다음과 같이 할 수 있습니다.
find -type f -newermt "@$lasttime" -exec mv -t path/to/destination/ {} +
$lasttime
에포크 이후 이전에 저장된 파일 수정 시간(예: 에서 얻은 시간 stat -c %Y yourfile
) 은 어디에 있습니까?
참조 파일의 타임스탬프를 변수에 저장하는 대신 find -newer somefile
OR을 직접 사용하여 수정 시간을 참조 파일의 수정 시간과 비교할 수도 있습니다 .find -newermm somefile
선택을 현재 디렉터리(하위 디렉터리 제외)로 제한하려면 -maxdepth 1
명령에 을 추가하면 됩니다 find
.