cp/rsync - 작을 경우 덮어쓰기, 원본 파일 백업, 크면 덮어쓰기

cp/rsync - 작을 경우 덮어쓰기, 원본 파일 백업, 크면 덮어쓰기

폴더 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

매우 제한된 테스트를 수행했는데 작동하는 것 같습니다. 주의 깊게 테스트하고 필요에 맞게 수정하십시오.

관련 정보