2016-08-20 51 views
0

任何线索只有在目标文件较小时才能移动文件并覆盖目标目录中的文件?移动覆盖较小的文件

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

伪代码看起来像:

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

不知道您是否可以通过文件大小轻松检查,但mv具有用于更新的'-u'开关,用于比较文件日期。这对你有用吗? – Robert

+0

我知道'-u'开关,但我需要在这种情况下比较大小。例如。对于静态目录和没有通配符的情况,很容易“触摸”更大的文件,然后使用“-u”,但这也会使事情变得复杂。 – null

+0

较小的目标文件中是否存在与较大输入文件的开头相同的数据? – Armali

回答

0

猛砸不允许你在进程获取文件的大小。 你可以做这样的事情

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

,但如果你想在一个循环中运行这个不要指望hyperspeed。

+0

这会让我看得很慢。我用bash脚本还不是很好,但是用'-i'提示符的想法不容易编写脚本? – null

+0

我不知道你的意思是“抓住'-i'” – PSkocik

+0

假设我在INPUT目录中有3个文件,并且1个重复(按名称),但在TARGET目录中有更小的文件。你的方式是检查所有文件的大小,这是毫无意义的。在覆盖之前捕获'mv -i' - 提示只会在两个目录中有相同的文件时才会发生,因此对于INPUT中的一个文件和TARGET dir中的一个文件(具有相同名称)。 – null