특정 디렉터리의 파일 목록에서 최신 파일을 가져오는 방법은 무엇입니까? [폐쇄]

특정 디렉터리의 파일 목록에서 최신 파일을 가져오는 방법은 무엇입니까? [폐쇄]

특정 디렉터리의 파일 목록에서 최신 파일을 가져와야 합니다.

처음 스크립트를 실행했을 때 특정 디렉터리의 파일 목록을 다른 디렉터리로 복사했습니다.

두 번째 실행부터는 동일한 디렉터리에 있는 파일 목록에서 최신 파일을 가져와 해당 파일을 다른 디렉터리에 복사해야 합니다.

첫 번째 실행에서는 마지막 파일의 생성 날짜를 변수에 캡처했으며, 스크립트가 두 번째 실행될 때 파일은 첫 번째 실행의 마지막 파일 생성 날짜보다 이후에 복사되어야 했습니다. 다른 디렉토리 .

누구든지 최신 파일을 구하도록 도와주실 수 있나요?

답변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/

-tGilles가 아래 설명에서 지적했듯이, 이 옵션을 사용하지 못하게 하는 참작이 가능한 상황이 있을 수 있습니다. 하지만 그것에서 무엇이든 빼앗는다면 그것은 바로 당신이다할 수 있는그리고테스트해야한다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 somefileOR을 직접 사용하여 수정 시간을 참조 파일의 수정 시간과 비교할 수도 있습니다 .find -newermm somefile

선택을 현재 디렉터리(하위 디렉터리 제외)로 제한하려면 -maxdepth 1명령에 을 추가하면 됩니다 find.

관련 정보