Linux

複製最後使用的總大小的文件

  • February 23, 2016

我想將最後使用的(或可能創建的)總大小的文件複製到另一個文件夾。如果沒有其他工具,這可能嗎?

我有一個特定大小的 USB 驅動器,它小於文件夾的總大小。由於我無法將所有文件複製到 USB,我喜歡根據最新使用情況進行複制,直到沒有更多空間為止。理想情況下,該方法還支持更新文件,而無需擦除所有文件並重新複製它們。

假設(基於

$$ linux $$標記)您bash可用的,以及statsort命令;進一步假設您想首先同步最近修改的文件(有關其他時間戳選項,請參見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

引用自:https://unix.stackexchange.com/questions/263446