mac - Rsync en Windows: permisos incorrectos para directorios creados
robocopy (6)
Además, puede intentar crear una variable de entorno (global) CYGWIN
y establecer su valor en nontsec
Estoy intentando enviar cambios a mi servidor a través de ssh en Windows (cygwin) usando rsync
. El comando que estoy usando es:
rsync -rvz -e ssh / cygdrive / c / myfolder / [email protected]: / srv / www / prj112 / myfolder /
/srv/www/prj112/myfolder/
es propiedad de rsyncuser
. Mi problema es que si bien con rsync
los subdirectorios se crean a medida que se publican, a cada directorio se le asigna un permiso predeterminado de d---------
para que rsync
no pueda copiar ningún archivo dentro de él.
¿Cómo puedo solucionar esto?
Cygwin rsync informará el permiso denegado cuando algún proceso tenga el archivo de destino abierto. Descargue y ejecute Process Explorer y descubra si algo más está bloqueando el archivo o simplemente intente cambiar el nombre del archivo y vea si obtiene el error de Windows sobre algún otro proceso que tenga el archivo abierto.
La opción para ignorar los permisos NTFS ha cambiado en Cygwin versión 1.7. Esto podría ser lo que está causando el problema.
Intente agregar el indicador ''noacl'' a sus montajes Cygwin en C: / cygwin / etc / fstab, por ejemplo:
none /cygdrive cygdrive user,noacl,posix=0 0 0
Puede pasar permisos personalizados a través de rsync usando la opción ''chmod'':
rsync -rvz --chmod=ugo=rwX -e ssh source destination
Para sincronizar desde Windows a Unix / Linux, debe proporcionar un comando como
SET BACKUP_SERVER=my.backup.server
SET SSH_USER=theUnixUserName
SET STORAGEPATH=/home/%SSH_USER%/Backup/
SET STORAGEURI=%BACKUP_SERVER%:%STORAGEPATH%
SET SSH_ID=/cygdrive/c/Users/theWindowsUserName/Documents/keyfiles/id_dsa
SET EXCLUDEFILE=backup_excludes.txt
SET BACKUPLOGFILE=/cygdrive/c/Users/theWindowsUserName/Backuplogs/backup-%DATE%-%TIME::=-%.log
El comando ssh es entonces
SET BACKUP=rsync -azvu --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh="ssh -l %SSH_USER% -i ''%SSH_ID%''" --exclude-from=%EXCLUDEFILE% --delete --delete-excluded --log-file="%BACKUPLOGFILE%"
con backup_excludes.txt que contiene líneas de elementos ignorados como
.git
.svn
.o
/Debug
/Release
Entonces usarías esto en un script con
%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%
y así. Esto hará una copia de seguridad de sus directorios mySensibleData , myOtherSensibleData y myOtherSensibleData2 con los permisos 755 para directorios y 644 para archivos. También obtiene registros de copia de seguridad en su % BACKUPLOGFILE% para cada copia de seguridad.
Su problema proviene del hecho de que los permisos de Unix en ese directorio son realmente 0. Toda la información de acceso se almacena en ACL separadas, que rsync no copia. Por lo tanto, establece los permisos de la copia remota en 0 y, obviamente, no puede escribir en ese directorio posteriormente. Tu puedes correr
chmod -R 775
en ese directorio, que debería arreglar su problema de rsync.
Después de echar un vistazo a la página de manual, puedo decir que el parámetro chmod está disponible en rsync desde la versión ~ 2.6.8. Pero tienes que usar --chmod=ugo=rwX
en combinación con rsync -av
También deberías probar este comando:
rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder
Funcionaría en Linux al menos. Y tenga en cuenta que rsync no necesita mencionar ssh, al menos en Linux.
Pero si todo falla y solo para dar una opción, puede echar un vistazo a esta herramienta lista para empaquetar cwRsync
si despliega un sitio desde Windows (por ejemplo, octopress use rsync) es posible establecer el permiso para 775 agregar múltiples comandos chmod:
rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh