마지막으로 사용한(또는 생성된) 파일의 전체 크기를 다른 폴더에 복사하고 싶습니다. 추가 도구 없이 이것이 가능합니까?
폴더의 전체 크기보다 작은 특정 크기의 USB 드라이브가 있습니다. 모든 파일을 USB에 복사할 수 없기 때문에 더 이상 공간이 없을 때까지 최신 사용량을 기준으로 복사하는 것을 선호합니다. 이상적으로 이 방법은 모든 파일을 삭제하고 다시 복사하지 않고도 파일 업데이트를 지원합니다.
답변1
([linux] 태그를 기반으로) bash
및 및 stat
명령을 사용할 수 있다고 가정합니다 sort
. 또한 가장 최근에 수정된 파일을 먼저 동기화한다고 가정합니다(참조).사람들 통계다른 타임스탬프 옵션의 경우), 여기에 현재 디렉터리의 모든 파일(이것이 for f in *
핵심 라인)을 반복하고, 마지막으로 수정된 타임스탬프를 배열로 수집한 다음, 정렬된 시간을 반복하는 bash 스크립트가 있습니다. 스탬프 및 인쇄 – 샘플! -- 각 파일에 대한 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