我在文件夹 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
我做了一个非常有限的测试,它似乎有效。请仔细测试并修改以满足您的需求。