······datetime="$(echo $name | cut −c1-14 | \
······filename="$(echo $name | cut −c16-)"
······if [-d $name]; then
········echo " $index) $filename (contents = ${filecount} items," \
············ " deleted = $datetime)"
······else
········echo " $index) $filename (size = ${size}Kb, deleted = $datetime)"
······fi
······index=$(($index + 1))
····done
····echo ""
····/bin/echo −n "Which version of $1 should I restore ('0' to quit)? [1]: "
····read desired
····if [! -z "$(echo $desired | sed 's/[[: digit: ]]//g')"]; then
······echo "$0: Restore canceled by user: invalid input." >&2
······exit 1
····fi
····if [${desired:=1} −ge $index]; then
······echo "$0: Restore canceled by user: index value too big." >&2
······exit 1
····fi
····if [$desired −lt 1]; then
······echo "$0: Restore canceled by user." >&2
······exit 1
····fi
······echo "\"$1\" already exists in this directory. Cannot overwrite." >&2
······exit 1
····fi
····/bin/echo −n "Restoring file \"$1\"…"
····$move "$restore" "$dest/$1"
····echo "done."
····read answer
····if [${answer:=y} = "y"]; then
······$realrm −rf *"$1"
······echo "Deleted."
····else
······echo "Additional copies retained."
····fi
··else
····if [-e "$dest/$1"]; then
······echo "\"$1\" already exists in this directory. Cannot overwrite." >&2
······exit 1
····fi
····restore="$(ls −d *"$1")"
····/bin/echo −n "Restoring file \"$1\"… "
····$move "$restore" "$dest/$1"
····echo "Done."
··fi
··exit 0
Как это работает
Первый фрагмент кода в
Пользователь может указать в аргументе имя файла или каталога для восстановления. Следующий шаг в
Необычное применение вложенных двойных кавычек в этой строке (вокруг $1) позволяет команде ls находить совпадения с именами файлов, содержащими пробелы, а шаблонный символ * разрешает совпадения с именами, включающими произвольные префиксы с временем удаления. Последовательность 2> /dev/null нужна, чтобы скрыть любые сообщения об ошибках от пользователя, выводимые командой. С наибольшей вероятностью будет скрыто сообщение об ошибке «No such file or directory» («Нет такого файла или каталога»), которое выводит команда ls, когда не может найти файл с указанным именем.