【问题标题】:Moving with overwriting smaller files移动覆盖较小的文件
【发布时间】:2016-08-20 20:04:39
【问题描述】:

只有当目标文件较小时,我如何才能移动文件并覆盖目标目录中的文件?

我一直在寻找一些 bash 解决方案,但找不到任何支持标准通配符的解决方案。

伪代码如下:

WHEN mv -i is triggering prompt AND input_file_size > target_file_size:
    mv input_file target_file

【问题讨论】:

  • 不确定是否可以通过文件大小轻松检查,但 mv 具有用于更新的-u 开关,它将比较文件日期。这对你有用吗?
  • 我知道-u 开关,但在这种情况下我需要比较大小。例如。对于静态目录并且没有通配符,touch 更大的文件然后使用-u 很容易,但它也使事情变得复杂。
  • 较小目标文件中已存在的数据与较大输入文件的开头是否相同?
  • 在大多数情况下不是。

标签: linux bash file


【解决方案1】:

Bash 不允许您在进程中获取文件大小。 你可以做类似的事情

sz0=$(stat -c%s input_file)
sz1=$(stat -c%s target_file)
if ((sz1 < sz0)); then mv input_file target_file; fi

但如果您想循环运行,不要期望超高速。

【讨论】:

  • 据我所见,这会很慢。我还不太擅长 bash 脚本,但是捕捉-i 提示的想法不容易编写脚本?
  • 不知道你说的“抓-i”是什么意思
  • 假设我在 INPUT 目录中有 3 个文件,在 TARGET 目录中有 1 个重复(按名称)但较小的文件。您的方式是检查所有文件的大小,这是毫无意义的。捕获mv -i - 覆盖前的提示只会在两个目录中存在相同文件时才会发生,因此对于 INPUT 中的一个文件和 TARGET 目录中的一个文件(同名)。
猜你喜欢
  • 2020-04-16
  • 2023-04-09
  • 2016-07-17
  • 2011-11-17
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多