cp / rsync - 如果较小则覆盖,备份原始文件,如果较大则覆盖

cp / rsync - 如果较小则覆盖,备份原始文件,如果较大则覆盖

我在文件夹 A 中有一些文件,但我想在文件夹 B 中复制这些文件。文件夹 B 包含一些同名的文件。

所有文件上的时间戳都是相同的,我想覆盖并备份同名的较大文件,同时覆盖而不备份同名的较小目标文件。

cp对于简单或来说,这似乎是一个太大的挑战rsync

谢谢!

答案1

您没有说要如何处理相同大小的文件。您也没有说明是否要覆盖“A”或“B”目录中的文件。

我不知道你可以单独使用 rsync 或 cp 来做到这一点。在此示例中,“/tmp/A”是源目录,“/tmp/B”是目标目录,“/tmp/C”是备份目标目录。

我备份并覆盖“B”中较大的文件。我只是覆盖较小的文件,并且对相同大小的文件不执行任何操作。

# get the size and filnames of files in '/tmp/A' directory and loop through each file found
ls /tmp/A | while read filename
do
  # get the size of file in 'A' directory
  sizeA=$( ls -l "/tmp/A/${filename}" | awk '{print $5}')

  # get the size of corresponding file in 'B' directory
  sizeB=$(ls -l "/tmp/B/${filename}" | awk '{print $5}')

  # compare file sizes and perform appropriate action
  if [ ${sizeB} -gt ${sizeA} ]
  then
    echo "file in B named \"${filename}\" is larger than A file"

    # Backup and overwrite the file
    cp "/tmp/B/${filename}" /tmp/C/
    cp -f "/tmp/A/${filename}" /tmp/B/

  else
    if [ ${sizeB} -lt ${sizeA} ]
    then
       echo "file in B named \"${filename}\" is smaller than A file"
       # overwrite the file
       cp -f "/tmp/A/${filename}" /tmp/B/
    else
       echo "The files \"${filename}\" are the same size"
    fi
  fi
done

我做了一个非常有限的测试,它似乎有效。请仔细测试并修改以满足您的需求。

相关内容