我想將最後使用的(或可能建立的)總大小的檔案複製到另一個資料夾。如果沒有額外的工具,這可能嗎?
我有一個特定大小的 USB 驅動器,小於資料夾的總大小。由於我無法將所有檔案複製到 USB,因此我喜歡根據最新使用情況進行複製,直到沒有更多空間為止。理想情況下,該方法還支援更新文件,而無需刪除所有文件並重新複製它們。
答案1
假設(基於 [linux] 標籤)您有bash
可用的以及 和stat
命令sort
;進一步假設您要先同步最近修改的檔案(請參閱人統計對於其他時間戳選項),那麼這裡是一個 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