mvdir.sh 856 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/bin/sh
  2. set -e -x
  3. if [ -n "$PLUGIN_SOURCE" -a -n "$PLUGIN_TARGET" ]; then
  4. set "$PLUGIN_SOURCE" "$PLUGIN_TARGET"
  5. fi
  6. if [ ! -d "$1" ]; then
  7. echo "$1" must be a directory >&2
  8. exit 1
  9. fi
  10. SOURCE_TMP=`realpath "$1"`
  11. SOURCE_DIR=`dirname "$SOURCE_TMP"`
  12. SOURCE_BASE=`basename "$SOURCE_TMP"`
  13. if [ -f "$2" -a ! -L "$2" ]; then
  14. echo "$2" must not exist or be a symlink >&2
  15. exit 2
  16. fi
  17. TARGET_DIR_TMP=`dirname "$2"`
  18. if [ ! -d "$TARGET_DIR_TMP" ]; then
  19. echo "$TARGET_DIR_TMP" must be a directory >&2
  20. exit 3
  21. fi
  22. TARGET_DIR=`realpath "$TARGET_DIR_TMP"`
  23. TARGET_BASE=`basename "$2"`
  24. cd "$TARGET_DIR"
  25. DIR=`mktemp -d -p . "$TARGET_BASE".XXXXXX`
  26. mv "$SOURCE_DIR/$SOURCE_BASE" "$DIR"
  27. chmod a+rx "$DIR"
  28. ln -s "$DIR/$SOURCE_BASE" "$DIR.link"
  29. mv -T "$DIR.link" "$TARGET_BASE"
  30. for OTHER in "$TARGET_BASE".*; do
  31. test "$OTHER" -ef "$DIR" || rm -rf "$OTHER"
  32. done