We use 'xargs cp' to emulate 'cpio -pumd'. cpio is fed from the output of 'find --depth' without filtering out directories. We don't need to copy directories except the empty ones, so we need to filter out non-empty directories. Then we can use 'cp -r' and it will not actually recurse anything. Signed-off-by: Johannes Sixt <johannes.sixt@xxxxxxxxxx> --- git-clone.sh | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-) diff --git a/git-clone.sh b/git-clone.sh index 1fc5c92..87fc0fb 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -39,6 +39,33 @@ case $(uname -s) in find () { /usr/bin/find "$@" } + # need an emulation of cpio + cpio() { + case "$1" in + -pumd) cp_arg=-pr;; + -pumdl) cp_arg=-lr;; + *) die "cpio $1 unexpected";; + esac + # copy only files and empty directories + prev= + while read f; do + if test -d "$f"; then + # here we assume that directories are listed after + # its files (aka 'find -depth'), hence, a directory + # that is not empty will be a leading sub-string + # of the preceding entry + case "$prev" in + "$f"/* ) ;; + *) echo "$f";; + esac + else + echo "$f" + fi + prev="$f" + done | + xargs --no-run-if-empty \ + cp $cp_arg --target-directory="$2" --parents + } # pwd must return a path with a drive letter bin_pwd() { # there are no symlinks to resolve: /bin/pwd is not needed -- 1.5.4.1.126.ge5a7d - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html