最後に使用した(または作成した)合計サイズのファイルを別のフォルダーにコピーしたいのですが、追加のツールなしで可能ですか?
フォルダーの合計サイズよりも小さい、特定のサイズの USB ドライブがあります。すべてのファイルを USB にコピーすることはできないので、空き容量がなくなるまで最新の使用状況に基づいてコピーします。理想的には、この方法では、すべてのファイルを消去して再度コピーする必要なく、ファイルの更新もサポートされます。
答え1
[linux]タグに基づいて、bash
およびコマンドが利用可能でstat
ありsort
、さらに、最も最近変更されたファイルを最初に同期したいという仮定(男の統計他のタイムスタンプ オプションについては、現在のディレクトリ内のすべてのファイル (for f in *
がそのキー行) をループし、最終変更タイムスタンプを配列に収集し、ソートされたタイムスタンプをループして、各ファイルに対してサンプルの rsync コマンドを出力する 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