diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java index b21b771b5..458905f71 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java @@ -691,9 +691,24 @@ public Process sync(RemoteItem remoteItem, String localPath, String remotePath, ArrayList defaultParameter = new ArrayList<>(Arrays.asList("--transfers", "1", "--stats=1s", "--stats-log-level", "NOTICE", "--use-json-log")); ArrayList directionParameter = new ArrayList<>(); - if(useMD5Sum){ + boolean isSftpRemote = remoteItem.isRemoteType(RemoteItem.SFTP); + if(useMD5Sum && !isSftpRemote){ defaultParameter.add("--checksum"); } + if(isSftpRemote){ + // Many SFTP servers (e.g. Synology restricted shells) can't run md5sum/sha1sum + // over SSH even though the files are reachable via SFTP. Disabling the remote + // hash commands avoids "corrupted on transfer: hashes differ" failures, but it + // also means no common hash type is left to compare with --checksum. If both + // were combined, rclone silently falls back to a size-only comparison and + // ignores modification time, so changed files of the same size never get + // re-synced. Skip --checksum here and let rclone use its default size+modtime + // comparison instead. + defaultParameter.add("--sftp-md5sum-command"); + defaultParameter.add("none"); + defaultParameter.add("--sftp-sha1sum-command"); + defaultParameter.add("none"); + } if(deleteExcluded){ defaultParameter.add("--delete-excluded"); }