O Nautilus fornece caminhos selecionados para scripts como argumentos do programa. O script a seguir renomeará os caminhos fornecidos como argumentos do programa para arquivos aleatórios (preservando a extensão do arquivo) e informará o usuário sobre o resultado via Zenity (ou na linha de comando sem o 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
Ele usa mktemp
em vez de $RANDOM
para selecionar o caminho de destino porque
-
mktemp
garante que o arquivo de destino não existe e
- porque funciona com shells Bourne compatíveis com POSIX que não suportam as extensões especiais
$RANDOM
e sem problemas de Bash.
Assim, os nomes aleatórios não são numéricos, mas consistem em uma sequência de 8 caracteres alfanuméricos aleatórios. Se você realmente quiser usar $RANDOM
, posso criar uma variante com base nele.