最後に使用したファイルの合計サイズをコピーします。

最後に使用したファイルの合計サイズをコピーします。

最後に使用した(または生成された)ファイルの合計サイズを別のフォルダにコピーしたいと思います。追加ツールなしでこれは可能ですか?

フォルダのフルサイズより小さい特定のサイズのUSBドライブがあります。すべてのファイルをUSBにコピーできないため、スペースがなくなるまで最新の使用量に基づいてコピーすることをお勧めします。理想的には、この方法はすべてのファイルを削除して再コピーすることなくファイルの更新をサポートします。

ベストアンサー1

([linux]タグに基づいて)bashstatコマンドを使用できるとします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

おすすめ記事