Чистый способ создания сцепленных путей из нескольких источников и преобразования для выполнения Cygwin RSync для копирования определенных деревьев жестко связанных папок? - PullRequest
0 голосов
/ 21 сентября 2019

Чистый способ создания составных контуров с несколькими источниками и преобразования для выполнения Cygwin RSync для копирования определенных деревьев жестко связанных папок?

Это требует 2 основных этапа:

  • Построение полных строк пути Windows путем установки, использования & concat переменных
  • После построения путей используйте функцию Cygwin cypath для преобразования путей

Первый этап этого процесса выполнен в командном файле, указанном ниже.Я также написал файл .SH, но некоторые из моих знаний и синтаксиса .sh не очень хороши, поэтому я был бы признателен, если бы он мог быть исправлен для ошибок / недостатков.

И как мне взять эти строки пути Windows первого этапа и использовать функцию преобразования путей Cygwin cypath , чтобы получить полные пути Cygwin, которые могут быть переданы Rsync.

Вы можете игнорировать строку выполнения ln.exe, поскольку она специфична для использования ln.exe в качестве инструмента, а не для rsync.

Примечание. Инструменты командной строки для сохранения жестких ссылок Копирование:
  • ln.exe - жесткие ссылки командной строки -http://schinagl.priv.at/nt/ln/ln.html (Win)
  • Rsync вариантов - (Несколько * Nix & Windows: варианты Cygwin, CW RSync, Delta Copy / Syncrify / Synaman, GRsync, RsyncBackup, Rsync.exe pkg, Rclone, AcroSync, YInterSync)

Рабочий .BAT (с использованием LN.exe под Windows)

HL_Copy_LN.BAT

ECHO ON   

REM ### Setting up of NEEDED Variables ###  

REM Setting up the Source Hard Linked Folder tree names
SET FolA1="f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122"
SET FolA2="iMazing.Versions\Versions\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122"

REM Setting up the Parent Folder for SOURCE folders (Can vary) 
SET SrcRoot="C:\Users\UserName\AppData\Roaming\iMazing\Backups"

REM Setting up the GRAND PARENT DESTINATION Folder for Source folders (Can vary) 
SET DstRoot="S:\_HDD_WD750\T61\HL_TEST\LN"

REM Additional info: Count/ Number & Info about variation of arguments used +  Concatenated into Destination PARENT folder & LogFile names (Can vary)
SET DstCountFol="003--includedir--cp-bk"
SET DstLog=%DstCountFol:"=%_Log.txt

REM  ###  Concatenations of Variables  ###  

REM GrandParent Folder + Parent folder name parameters
SET DstPlus=%DstRoot:"=%\%DstCountFol:"=%

REM Concatenate together Paths for Multiple Source Folders to use for HL copy
SET SrcA1=%SrcRoot:"=%\%FolA1:"=%
SET SrcA2=%SrcRoot:"=%\%FolA2:"=%

REM Concatenate together Paths for Multiple DEST Folders to use for HL copy
SET DstA1=%DstRoot:"=%\%DstCountFol:"=%\%FolA1:"=%
SET DstA2=%DstRoot:"=%\%DstCountFol:"=%\%FolA2:"=%

REM Echoing the Source & Dest Paths in Full 
ECHO %SrcA1%
ECHO %SrcA2%

ECHO %DstA1%
ECHO %DstA2%

REM Execute the HL preserving copy of Hard Linked Folder Trees  
ln.exe --progress --json --output %DstLog% --source %SrcA2% --destination %DstA2% --backup --copy %SrcA1% %DstA1%

ECHO ON  


Портированный / преобразованный .SH-скрипт

HL_Copy_RSync.SH (The needed code - Needs clean up) 

#  ### Setting up of NEEDED Variables ###  

#  Setting up the Source Hard Linked Folder tree names
export  FolA1="f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122"
export  FolA2="iMazing.Versions\Versions\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122"

#  Setting up the Parent Folder for SOURCE folders (Can vary) 
export  SrcRoot="C:\Users\UserName\AppData\Roaming\iMazing\Backups"

#  Setting up the GRAND PARENT DESTINATION Folder for Source folders (Can vary) 
export  DstRoot="S:\_HDD_WD750\T61\HL_TEST\LN"

#  Additional info: Count/ Number & Info about variation of arguments used +  Concatenated into Destination PARENT folder & LogFile names (Can vary)
export  DstCountFol="003--includedir--cp-bk"
export  DstLog=$DstCountFol"_Log.txt"

#   ###  Concatenations of Variables  ###  

#  GrandParent Folder + Parent folder name parameters
export  DstPlus=$DstRoot"\\"$DstCountFol

#  Concatenate together Paths for Multiple Source Folders to use for HL copy
export  SrcA1=$SrcRoot"\\"$FolA1
export  SrcA2=$SrcRoot"\\"$FolA2

#  Concatenate together Paths for Multiple DEST Folders to use for HL copy
export  DstA1=$DstRoot"\\"$DstCountFol"\\"$FolA1
export  DstA2=$DstRoot"\\"$DstCountFol"\\"$FolA2

#  Echoing the Source & Dest Paths in Full 
echo $SrcA1
echo $SrcA2

echo $DstA1
echo $DstA2

# Stage 2 - Use cygpath - to convert Windows Path strings to Full Cygpath Strings
#$CygSrcA1=$(cygpath -u $SrcA1)

echo DstRoot: 

echo $DstRoot
$CygDstRoot=$(cygpath -u $DstRoot)

echo Cyg: 
echo $CygDstRoot

#   ###  Execute the HL preserving copy of Hard Linked Folder Trees  ###  
# ln.exe --progress --json --output $DstLog --source $SrcA2 --destination $DstA2 --backup --copy $SrcA1 $DstA1

# Rsync Execution Syntax 
echo ON  



Вывод: (Мои переменные и сборка / конкатенация пути здесь определенно имеют некоторые проблемы)


Ax@MyMachine /cygdrive/c/apps/_ntfs/Scripts
$ bash RS_001.sh
ON
C:\Users\UserName\AppData\Roaming\iMazing\Backups\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122
C:\Users\UserName\AppData\Roaming\iMazing\Backups\iMazing.Versions\Versions\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122
S:\_HDD_WD750\T61\HL_TEST\LN\003--includedir--cp-bk\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122
S:\_HDD_WD750\T61\HL_TEST\LN\003--includedir--cp-bk\iMazing.Versions\Versions\f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122
DstRoot:
S:\_HDD_WD750\T61\HL_TEST\LN
RS_001.sh: line 68: =/cygdrive/s/_HDD_WD750/T61/HL_TEST/LN: No such file or directory
Cyg:

ON




Теперь это не ракетостроениесидеть и изучать синтаксис и формат сценариев BASH / Unix Shell, но учитывая их нюансы и тонкости вместо того, чтобы публиковать тонны этих вопросов, я бы предпочел упростить запрос за один раз:

  • Проблемы конкатенации / специальных символов
  • Проблемы с путями
  • Проблемы с EOL / CR-LF
  • Проблемы со строкамиs
  • Unix против Windows против проблем Cygwin
  • Проблемы с файловой системой

Я рассчитывал выпустить это с моим образцом .BAT & .SH и, возможно,кто-то может дать чистый способ, чтобы конвертировать эти минимизируя эти сложные проблемы.


Пример тестирования CYGWIN Rsync, выполненного до сих пор

CYGWIN_RSync_Test.SH

# This little sample works directly on Cygwin
SRCDIR="/cygdrive/c/APPS/_NTFS/Scripts/RS /cygdrive/c/APPS/_NTFS/Scripts/TestFol"
DESTDIR="/cygdrive/S/_HDD_WD750/T61/HL_TEST/RS_000"

# rsync -avb "/cygdrive/c/APPS/_NTFS/Scripts/RS" "/cygdrive/S/_HDD_WD750/T61/HL_TEST/RS_002"

rsync -avb  $SRCDIR $DESTDIR


# What would a clean way to setup these Variables, then concatenate & clean/ convert path strings  

# Hard Links Parameters/ Arguments for Rsync
# rsync -ahPruvz --hard-links C S

...