NBash

Форк
0
100 строк · 3.1 Кб
1
#!/bin/bash
2

3
archivedir="$HOME/.deleted-files"
4
realrm="$(which rm)"
5
move="$(which mv)"
6
dest=$(pwd)
7

8
if [ ! -d $archivedir ] ; then
9
	echo "$0: Не найден каталог с удаленными файлами" >&2
10
	exit 1
11
fi
12

13
cd $archivedir
14

15
# Если сценарий запущен без аргументов выводим список файлов
16
if [ $# -eq 0 ] ; then
17
	echo "Содержимое архива удаленных файлов (отсортировано по дате):"
18
	ls | sed -e 's/\([[:digit:]][[:digit:]]\.\)\{4\}//g' \
19
	-e 's/\([[:digit:]][[:digit:]]\-\)//g'
20
	
21
	exit 0
22
fi
23

24
# Если пользователь задал шаблон для поиска.
25
matches="$(ls -d *"$1" 2> /dev/null | wc -l)"
26

27
if [ $matches -eq 0 ] ; then
28
	echo "Нет совпадений для \"$1\" в архиве удаленных." >&2
29
	exit 1
30
fi
31

32
if [ $matches -gt 1 ] ; then
33
	echo "Более одного совпадения в архиве:"
34
	index=1
35
	for name in $(ls -td *"$1")
36
	do
37
		datetime="$(echo $name | cut -c1-14 | awk -F. '{ print $5"/"$4" в "$3":"$2":"$1 }')"
38
		filename="$(echo $name | cut -c16-)"
39
		if [ -d $name ] ; then
40
			filecount="$(ls $name | wc -l | sed 's/[^[:digit:]]//g')"
41
			echo " $index) $filename (содержит = ${filecount} элементов, удалено = $datetime)"
42
		else
43
			size="$(ls -sdk1 $name | awk '{ print $1 }' )"
44
			echo " $index) $filename (размер = ${size}Кб, удалено = $datetime)"
45
		fi
46
		index=$(( $index + 1 ))
47
	done
48
	
49
	echo ""
50

51
	echo -n "Какую версию $1 вы желаете восстановить ('0' для выхода)? [1] : "
52
	read answer
53

54
	if [ ! -z "$(echo $answer | sed 's/[[:digit:]]//g')" ] ; then
55
		echo "$0: Восстановление отменено пользователем: неверный ввод." >&2
56
		exit 1
57
	fi
58

59
	if [ ${answer:=1} -ge $index ] ; then
60
		echo "$0: Восстановление отменено пользователем: выбран индекс больше максимального"  >&2
61
		exit 1
62
	fi
63

64
	if [ $answer -lt 1 ] ; then
65
		echo "$0: Восстановление отменено пользователем" >&2
66
		exit 1
67
	fi
68

69
	restore="$(ls -td1 *"$1" | sed -n "${answer}p")"
70

71
	if [ -e "$dest/$1" ] ; then
72
		echo "\"$1\" уже существует в этом каталоге, невозможно перезаписать." >&2
73
		exit 1
74
	fi
75

76
	echo -n "Восстановление файла \"$1\" ... "
77
	$move "$restore" "$dest/$1"
78
	echo "Завершено."
79

80
	echo -n "Удалить остальные резервные копии файла из хранилища? [y] "
81
	read answer
82

83
	if [ ${answer:=y} = "y" ] ; then
84
		$realrm -rf *"$1"
85
		echo "Удалено."
86
	else
87
		echo "Оставшиеся резервные копии сохранены"
88
	fi
89
else
90
	if [ -e "$dest/$1" ] ; then
91
		echo "\"$1\" уже существует в этом каталоге, невозможно перезаписать." >&2
92
		exit 1
93
	fi
94

95
	restore="$(ls -d *"$1")"
96

97
	echo -n "Восстановление файла \"$1\" ... "
98
	$move "$restore" "$dest/$1"
99
	echo "Завершено."
100
fi

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.