56 lines
1.7 KiB
Fish
56 lines
1.7 KiB
Fish
function rscp
|
|
if test (count $argv) -lt 2
|
|
echo "Usage: rscp SOURCE DESTINATION"
|
|
return 1
|
|
end
|
|
|
|
if not command -q rsync
|
|
echo "rscp: 'rsync' is not installed. Install it via your package manager."
|
|
return 1
|
|
end
|
|
|
|
set -l src $argv[1]
|
|
set -l dst $argv[2]
|
|
|
|
# Mount <-> NAS dataset mapping (keep both lists in the same order)
|
|
set -l mounts /home/honney/mount/Media /home/honney/mount/Data /home/honney/mount/Ripping /home/honney/mount/Apps
|
|
set -l remotes NAS:/mnt/tank/Media NAS:/mnt/tank/Data NAS:/mnt/tank/Ripping NAS:/mnt/tank/Apps
|
|
|
|
set -l src_remote 0
|
|
set -l dst_remote 0
|
|
|
|
for i in (seq (count $mounts))
|
|
if string match -q -- $mounts[$i] $src; or string match -q -- "$mounts[$i]/*" $src
|
|
set src (string replace -f -- $mounts[$i] $remotes[$i] -- $src)
|
|
set src_remote 1
|
|
break
|
|
end
|
|
end
|
|
|
|
for i in (seq (count $mounts))
|
|
if string match -q -- $mounts[$i] $dst; or string match -q -- "$mounts[$i]/*" $dst
|
|
set dst (string replace -f -- $mounts[$i] $remotes[$i] -- $dst)
|
|
set dst_remote 1
|
|
break
|
|
end
|
|
end
|
|
|
|
if test $src_remote -eq 0 -a $dst_remote -eq 0
|
|
echo "cp -av -- $src $dst"
|
|
command cp -av -- $src $dst
|
|
return $status
|
|
end
|
|
|
|
# --no-perms: required - TrueNAS ZFS datasets use SMB ACLs and reject unix perms preservation
|
|
set -l opts -avh --no-perms --info=progress2 --partial
|
|
if test $dst_remote -eq 1
|
|
set -a opts --rsync-path="sudo -n rsync" --chown=1000:0
|
|
end
|
|
if test $src_remote -eq 1
|
|
set -a opts --rsync-path="sudo -n rsync"
|
|
end
|
|
|
|
echo rsync $opts -- $src $dst
|
|
command rsync $opts -- $src $dst
|
|
end
|