From: Daniel Kobras Date: Wed, 28 Nov 2012 18:12:24 +0000 (-0800) Subject: LU-2302 scripts: null-terminated file lists in lfs_migrate X-Git-Tag: 2.3.58~31 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=91707ff6ba5130811a9350c8ce8c102d29a5930e LU-2302 scripts: null-terminated file lists in lfs_migrate New option -0 allows to use a null-terminated list of file names on stdin. Changed internal lfs find to use null-terminates lists. Signed-off-by: Daniel Kobras Change-Id: Iccd928a766968a7513833035684d41a1060c4a4d Reviewed-on: http://review.whamcloud.com/4700 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Keith Mannthey --- diff --git a/lustre/scripts/lfs_migrate b/lustre/scripts/lfs_migrate index 1f35568..7d9386f 100755 --- a/lustre/scripts/lfs_migrate +++ b/lustre/scripts/lfs_migrate @@ -20,7 +20,7 @@ LFS=${LFS:-lfs} usage() { cat -- <&2 -usage: lfs_migrate [-c ] [-h] [-l] [-n] [-q] [-R] [-s] [-y] +usage: lfs_migrate [-c ] [-h] [-l] [-n] [-q] [-R] [-s] [-y] [-0] [file|dir ...] -c restripe file using the specified stripe count @@ -31,6 +31,7 @@ usage: lfs_migrate [-c ] [-h] [-l] [-n] [-q] [-R] [-s] [-y] -R restripe file using default directory striping -s skip file data comparison after migrate -y answer 'y' to usage question + -0 input file names on stdin are separated by a null character The -c option may not be specified at the same time as the -R option. @@ -47,7 +48,7 @@ USAGE OPT_CHECK=y OPT_STRIPE_COUNT="" -while getopts "c:hlnqRsy" opt $*; do +while getopts "c:hlnqRsy0" opt $*; do case $opt in c) OPT_STRIPE_COUNT=$OPTARG;; l) OPT_NLINK=y;; @@ -56,6 +57,7 @@ while getopts "c:hlnqRsy" opt $*; do R) OPT_RESTRIPE=y;; s) OPT_CHECK="";; y) OPT_YES=y;; + 0) OPT_NULL=y;; h|\?) usage;; esac done @@ -89,7 +91,7 @@ $RSYNC --help 2>&1 | grep -q acls && RSYNC_OPTS="$RSYNC_OPTS -A" strings $(which $RSYNC) 2>&1 | grep -q lustre && LFS=: lfs_migrate() { - while read OLDNAME; do + while IFS='' read -d '' OLDNAME; do $ECHO -n "$OLDNAME: " # avoid duplicate stat if possible @@ -163,13 +165,17 @@ lfs_migrate() { } if [ "$#" -eq 0 ]; then - lfs_migrate + if [ "$OPT_NULL" ]; then + lfs_migrate + else + tr '\n' '\0' | lfs_migrate + fi else while [ "$1" ]; do if [ -d "$1" ]; then - lfs find "$1" -type f | lfs_migrate + lfs find "$1" -type f -print0 | lfs_migrate else - echo $1 | lfs_migrate + echo -en "$1\0" | lfs_migrate fi shift done