首页 > 解决方案 > Bash 移动文件,如果源文件较大,则覆盖

问题描述

我想将文件从目录 A 移动到目录 B。如果源文件的文件大小大于目标文件,我只想覆盖现有文件,否则跳过此文件。

标签: bashmv

解决方案


@axiac 提到这stat比 更有效wc,所以我改变了答案。

您可以使用statwc来比较两个文件的大小,如下所示。

my_mv () {
    file1_path=$1
    file2_path=$2
    file1_size=$(stat -f "%z" $file1_path)
    file2_size=$(stat -f "%z" $file2_path)
    #file1_size=$(wc -c $file1_path | awk '{print $1}')
    #file2_size=$(wc -c $file2_path | awk '{print $1}')
    if [ "$file1_size" -gt "$file2_size" ]; then
        mv $file1_path $file2_path
    else
        echo "Operation Aborted: \"$file1_path\" is not larger than \"$file2_path\""
    fi
}

把这个函数放到你的 .bashrc/.zshrc 中,这个函数的使用方式和 .bashrc 一样mv

用法:

my_mv path/to/file1 path/to/file2

推荐阅读