Linux
複製最後使用的總大小的文件
我想將最後使用的(或可能創建的)總大小的文件複製到另一個文件夾。如果沒有其他工具,這可能嗎?
我有一個特定大小的 USB 驅動器,它小於文件夾的總大小。由於我無法將所有文件複製到 USB,我喜歡根據最新使用情況進行複制,直到沒有更多空間為止。理想情況下,該方法還支持更新文件,而無需擦除所有文件並重新複製它們。
假設(基於
$$ linux $$標記)您
bash
可用的,以及stat
和sort
命令;進一步假設您想首先同步最近修改的文件(有關其他時間戳選項,請參見man stat),那麼這裡是一個 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