폴더 A에 일부 파일이 있지만 이 파일을 폴더 B에 복사하고 싶습니다. 폴더 B에는 동일한 이름을 가진 일부 파일이 포함되어 있습니다.
모든 파일의 타임스탬프는 동일하며 더 큰 파일을 동일한 이름으로 덮어쓰고 백업하는 동시에 동일한 이름의 더 작은 대상 파일을 덮어쓰고 백업하지 않으려고 합니다.
cp
이는 Simple 또는 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
매우 제한된 테스트를 수행했는데 작동하는 것 같습니다. 주의 깊게 테스트하고 필요에 맞게 수정하십시오.