PDA/Kopírování adresářů

:!: Originální skript je na těchto stránkách: http://synce.sourceforge.net/synce/contrib/pcp-r

:!: Pro systémy založené na Debianu (tedy i Ubuntu) nutno upravit ! (synce-pcp místo pls apod. !!!)

<ubu> Zde je upravený skript:

# recursively copy a directory to WinCE PDA
# Now handles spaces/dash in names, and multiple sources.
# Henrik Isacsson, <snout@ctrl-c.liu.se>  Apr 2004

if [ "$2" == "" ]; then
 echo "$0 source [source ..] dest"
 echo "example: $0 /my/files \":/storage card/\""
 echo "copies the 'files' directory to /storage card/files"
 echo "'source' must be a directory! Not a wildcard or similar."
 echo "'dest' must be a dir with a trailing slash, on the form \":/dir/\"."
 echo "source _OR_ dest MUST have a colon ':'. NOT both and NOT neither."
 exit
fi

# more than one source? handle them one at a time.
if [ $# -gt 2 ]; then
   THISPARAM=1
   LASTPARAM=$#
   while [ $THISPARAM -lt $LASTPARAM ]; do
     $0 "${!THISPARAM}" "${!LASTPARAM}"
     THISPARAM=$((THISPARAM+1))
   done
   exit 0
fi

if [ `echo "$2"|grep -cE "^:"` == 1 ]; then

  # case 1, copy _to_ PDA:  pcp-r "src" ":dest"

  # First, 'cd' to the base of the directory we're about to copy.
  cd `dirname "$1"`

  SRCDIR="`basename "$1"`"
  DSTDIR="$2"

  DSTNOCOLON="`echo "$DSTDIR"|sed 's/^://'`"

  # make the directory structure
  find "$SRCDIR" -type d|grep -vE '^.$'|sed 's/^.\///' | while read i; do
    synce-pmkdir "${DSTNOCOLON}/${i}"
  done

  # copy the files
  find "$SRCDIR" -type f|sed 's/^.\///' | while read i; do
    echo "writing file: $i"
    synce-pcp "$i" "${DSTDIR}${i}"
  done

elif [ `echo "$1"|grep -cE "^:"` == 1 ]; then

  # case 2, copy _from_ PDA:  pcp-r ":src" "dest"
  # recursive look,cd-or-copy,look.. problem.

  # looks at the $1 path - makes dir and recurses if dir, or copies if file
  # $1 - source, $2 - destination
  function copy-item {
    synce-pls "$1"| while read i; do
      # new method, as easily breakable but not worse than before.. we now
      # rely on the filename starting at exactly position 61 in the line pls
      # returns..
      i="`echo "$i"|cut -b61-`"
      if [ `echo "$i"|grep -cE "/$"` = 1 ]; then
        # directory
        echo "making dir: $2/$i"
        mkdir "$i"
        cd "$i"
        copy-item "$1/$i" "$2/$i"
        cd ..
      else
        # file
        if [ `echo "$1"|grep -cE "/$"` = 1 ]; then
          echo "reading file: [$2]$i"
          synce-pcp ":$1/$i" "$i"
        else
          echo "reading file: $i"
          synce-pcp ":$1" "$i"
        fi
      fi
    done
  }

  SRC="`echo "$1"|sed 's/^://'`"
  SRCLASTPART="`basename "$SRC"`"
  DSTDIR="$2"
  # check src: if dir, then make dir and append /.
  if [ `echo "$SRC"|grep -cE "/$"` = 1 ]; then
     # ends with slash? dir.
     FILETYPE=Directory
  else
     # if not? We figure it out ourselves.
     FILETYPE=`pls "$SRC"|cut -f1 -d" "`
  fi
    if [ "$FILETYPE" = "Directory" ]; then
      mkdir "$DSTDIR/$SRCLASTPART"
      cd "$DSTDIR/$SRCLASTPART"
      # base cases: copy srcdir to 'this' directory.
      copy-item "$SRC/" "$SRCLASTPART"
    elif [ "$FILETYPE" = "Archive" ]; then
    # if it's a file, just dump it in this directory..
      copy-item "$SRC" "$SRCLASTPART"
    else
      echo "Unknown file type \"$FILETYPE\" returned from pls."
      exit 1
    fi

else

  # error case
  echo "Neither source nor dest begins with ':' - don't know what to do."
  echo "arguments: source \"$1\", dest \"$2\""
  exit 1

fi

Můžete text zkopírovat do nějakého textového editoru a uložit např. jako pcpr.sh Nastavte práva spouštění např. příkazem

chmod +x pcpr.sh

Použití je jednoduché. Dejme tomu, že potřebujete zkopírovat adresar Madonna obsahující mp3 soubory na PPC do adresare /Storage card/Audio (podadresář Audio na PPC musi byt vytvořený předem)

Zadejte

vs@mypc:~$ ./pcpr.sh  ~/Audio/Madonna/ ":/Storage card/Audio/"

<circ> Průběh kopírování jednotlivých souborů bude zobrazen na vašem terminálu. Skript si pro snadné spouštění můžete samozřejmě zkopírovat např. do adresáře /usr/bin nebo jiného pro který je nastavena cesta.

Odkazy