samba-bugs@samba.org
2007-Sep-04 18:33 UTC
DO NOT REPLY [Bug 4621] "-p" option to simulate "mkdir -p" for rsync
https://bugzilla.samba.org/show_bug.cgi?id=4621 ------- Comment #1 from hq4ever@gmail.com 2007-09-04 13:32 CST ------- Hi, I would like to add that I've created a wrapper for rsync to implemented this functionality in the mean time, if/when it will be available via rsync itself. Bash: """ function cp() { # PARAMS: # $1 : What to Sync? # $2 : Where To? # if [ $# -lt 1 ]; then echo "Usage: " echo " cp <source> <target>" echo " cp <source>" echo " cp <source> /absolute/path/to/file" exit 1 fi # The following is a very strange way to load last variable into RSYNC_TARGET (don't ask...) for RSYNC_TARGET; do :; done # If the destination we got is not /absolute/path/to/somewhere, append $TARGET_DIR # infact, if we got empty target, assume root of TARGET_DIR # If we get full path - assume user tell us where to put it if [ "${RSYNC_TARGET:0:1}" != '/' ]; then RSYNC_TARGET="$TARGET_DIR/$RSYNC_TARGET" # Else if we got only 1 parameter, in this case - just take the file name and store it under build root dir. elif [ $# -eq 1 ]; then RSYNC_TARGET="${TARGET_DIR}/${1##*/}" fi RSYNC_SOURCE="$1" # Are we syncing directory as source? # If we are syncing directory, then we need to make sure it exists for rsync not fail. # If we are syncing multiple file selection, the destination must be a directory. # If we are syncing multiple file selection, the destination must be a directory. if [ -d "$RSYNC_SOURCE" -o $# -gt 2 ]; then # If target directory does not exists, create it. if [ ! -d "$RSYNC_TARGET" ]; then mkdir -p "$RSYNC_TARGET" fi else # Anything other then a directory, make sure the dir path exists. if [ ! -d "${RSYNC_TARGET%/*}" ]; then mkdir -p "${RSYNC_TARGET%/*}" fi fi # Load $1..$$-1 into bash array. Why? because this is <long param with-spaces> safe. declare -a RSYNC_ACTION local RSYNC_ACTION # If we got only 1 parameter (only source). if [ $# -eq 1 ]; then RSYNC_ACTION[0]="$1" RSYNC_ACTION[1]="$RSYNC_TARGET" else # for more then one... load them all into array. for (( i=0; $# > 1; i++ )) do RSYNC_ACTION[$i]="$1" shift done RSYNC_ACTION[i++]="$RSYNC_TARGET" fi rsync --recursive --quiet --links --safe-links --hard-links --perms --times --one-file-system --exclude='.svn' "${RSYNC_ACTION[@]}" } -- Configure bugmail: https://bugzilla.samba.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug, or are watching the QA contact.