LINUX.ORG.RU

История изменений

Исправление 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