Чистый способ создания составных контуров с несколькими источниками и преобразования для выполнения 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