Nautilus поставляет выбранные пути в сценарии в качестве аргументов программы. Следующий скрипт переименует пути, предоставленные в качестве аргументов программы, в случайные файлы (при сохранении расширения файла) и сообщит пользователю результат через Zenity (или в командной строке без X):
#!/bin/sh
set -eu
for source; do
case "$source" in
*/*) dir="${source%/*}";;
*) dir=.;;
esac
basename="${source##*/}"
case "$basename" in
?*.*) extension=".${basename##*.}"; basename="${basename%.*}";;
*) extension=;;
esac
message_type=info
destination="$(exec mktemp --tmpdir="$dir" --suffix="$extension" XXXXXXXXXX 2>&1)" ||
{ rv=$?; message="$destination"; false; } &&
message="$(exec mv -vT -- "$source" "$destination" 2>&1)" ||
{ rv="${rv-$?}"; message_type=error; }
if [ -n "${DISPLAY-}" ]; then
zenity "--$message_type" --no-markup --title="${0##*/}" --text="$message"
else
printf '%s: %s: %s\n' "${0##*/}" "$message_type" "$message" >&2
fi
[ -z "${rv-}" ] || exit "$rv"
done
Он использует mktemp вместо $RANDOM для выбора пути назначения, потому что
mktemp гарантирует, что целевой файл не существует и потому что он работает с POSIX-совместимыми оболочками Bourne, которые не поддерживают Специальная переменная $RANDOM Баша и расширения без clobber.Таким образом, случайные имена не являются численными, а состоят из последовательности из 8 случайных альфа-числовых символов. Если вы действительно хотите использовать $RANDOM, я могу создать на нем вариант.