전체 크기의 마지막으로 사용한 파일 복사

전체 크기의 마지막으로 사용한 파일 복사

전체 크기의 마지막으로 사용된(또는 생성된) 파일을 다른 폴더에 복사하고 싶습니다. 추가 도구 없이 이것이 가능합니까?

폴더의 전체 크기보다 작은 특정 크기의 USB 드라이브가 있습니다. 모든 파일을 USB에 복사할 수 없기 때문에 더 이상 공간이 없을 때까지 최신 사용량을 기준으로 복사하는 것을 좋아합니다. 이상적으로 이 방법은 모든 파일을 지우고 다시 복사할 필요 없이 파일 업데이트를 지원합니다.

답변1

([linux] 태그를 기반으로) 및 명령 bash뿐만 아니라 사용할 수 있다는 가정하에 ; 가장 최근에 수정된 파일을 먼저 동기화하려는 추가 가정에 따라(참조statsort남자 통계다른 타임스탬프 옵션의 경우), 여기에 현재 디렉터리의 모든 파일을 반복하는 bash 스크립트가 있습니다( for f in *이에 대한 핵심 행입니다). 마지막으로 수정된 타임스탬프를 배열로 수집한 다음 정렬된 타임스탬프를 반복하고 인쇄 - 샘플입니다! -- 각 파일에 대한 rsync 명령(현재 증거로 첨부된 타임스탬프 디버깅 정보가 있음)

물론 특정 상황에 맞게 rsync 명령을 조정해야 합니다. 이 스크립트는 현재 디렉터리의 모든 파일에 대해 rsync 명령을 출력합니다. 내 제안은 이러한 rsync의 "맹목적으로" 실행하여 마지막에 있는 것이 실패하도록 하거나 스크립트에 넣어 별도로 실행하는 것입니다.

이 스크립트는 어떤 방식으로든 대상의 공간 활용을 최적화하려고 시도하지 않습니다. 유일한 순서는 마지막 수정 타임스탬프입니다(동일한 초에 여러 파일이 수정된 경우 연관 배열의 임의 순서). .

#!/usr/bin/env bash
declare -A times

# gather the files and their last-modified timestamp into an associative array,
# indexed by filename (unique)
for f in *
do
  [ -f "$f" ] && times[$f]=$(stat -c %Y "$f")
done

# get the times in (unique) sorted order
for times in ${times[@]}
do
  echo $times
done | sort -run | while read t
do
  # then loop through the array looking for files with that modification time
  for f in "${!times[@]}"
  do
    if [[ ${times[$f]} = $t ]]
    then
      echo rsync "$f" -- timestamp ${times[$f]}
    fi
  done
done

답변2

파일을 수정 날짜별로 정렬한 다음 해당 순서대로 이름을 전달하여 rsync복사해야 합니다. cp대신 사용할 수도 있지만 rsync더 효율적입니다.

superuser.com에는 이 작업을 수행하는 방법에 대한 스레드가 이미 있습니다.https://superuser.com/a/208749/554082

관련 정보