最後に使用した(または生成された)ファイルの合計サイズを別のフォルダにコピーしたいと思います。追加ツールなしでこれは可能ですか?
フォルダのフルサイズより小さい特定のサイズの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