Исправление legolegs, (текущая версия) :
Скрипт для перемещения файлов без замены (при совпадении имён старый файл остаётся, а новый называется «имя (число)».
#!/bin/bash
# Move files to dir, do not overwite existing but rename new file.
# USAGE:
# mv_noreplace.sh <file1> <file 2> .... <dest dir>
# results:
# dest dir/file 1
# dest dir/file 1 (2)
# dest dir/file 1 (3)
# EXAMPLE:
# mv_noreplace.sh sourcedir/* "dest dir/"
set -euo pipefail
[ $# -ge 2 ] || { echo "Must specify the destination directory" >&2; exit 1; }
TARGETDIR=${*: -1}
[ -d "$TARGETDIR" ] || { echo "Destination must be a directory" >&2; exit 1; }
while [ $# -ge 2 ]; do
IFNAME=$1; shift
N=1
NAME=`basename "$IFNAME"`
RESNAME=$NAME
while [ -e "$TARGETDIR/$RESNAME" ]; do
N=`expr $N + 1`
RESNAME="$NAME ($N)"
done
mv "$IFNAME" "$TARGETDIR/$RESNAME"
done
Исходная версия legolegs, :
Скрипт для перемещения файлов без замены (при совпадении имён старый файл остаётся, а новый называется «имя (число)».
#!/bin/bash
#Move files to dir, if names collide no not overwite but rename new file.
# USAGE:
# mv_noreplace.sh <file1> <file 2> .... <dest dir>
# results:
# dest dir/file 1
# dest dir/file 1 (2)
# dest dir/file 1 (3)
set -euo pipefail
[ $# -ge 2 ] || { echo "Must specify the destination directory" >&2; exit 1; }
TARGETDIR=${*: -1}
[ -d "$TARGETDIR" ] || { echo "Destination must be a directory" >&2; exit 1; }
while [ $# -ge 2 ]; do
IFNAME=$1; shift
N=1
NAME=`basename "$IFNAME"`
RESNAME=$NAME
while [ -e "$TARGETDIR/$RESNAME" ]; do
N=`expr $N + 1`
RESNAME="$NAME ($N)"
done
mv "$IFNAME" "$TARGETDIR/$RESNAME"
done