复制上次使用的文件的总大小

复制上次使用的文件的总大小

我想将最后使用的(或可能创建的)总大小的文件复制到另一个文件夹。如果没有额外的工具,这可能吗?

我有一个特定大小的 USB 驱动器,小于文件夹的总大小。由于我无法将所有文件复制到 USB,因此我喜欢根据最新使用情况进行复制,直到没有更多空间为止。理想情况下,该方法还支持更新文件,而无需删除所有文件并重新复制它们。

答案1

假设(基于 [linux] 标签)您有bash可用的以及 和stat命令sort;进一步假设您要首先同步最近修改的文件(请参阅人统计对于其他时间戳选项),那么这里是一个 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

答案2

您应该按修改日期对文件进行排序,然后按该顺序将名称传递给rsync复制。您也可以使用cp它来代替,但rsync效率更高。

superuser.com 上已经有一个关于如何执行此操作的线程:https://superuser.com/a/208749/554082

相关内容