#!/bin/bash
# Skrypt można użyć jako:
# a) NAUTILUS ACTIONS
# utworzyć "akcje nautilusa" podając jako parametr %M
# b) NAUTILUS SCRIPTS
# $HOME/.gnome2/nautilus-scripts/move-to
(
if [ $# != 0 ] ; then
# jeśli istnieją parametry wejściowe (ścieżki zaznaczonych plików w "NAUTILUS ACTIONS" )
# wówczas załaduje je do tablicy (nazwa dla ułatwienia)
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=( "${@}" )
# w "NAUTILUS SCRIPTS" tworzona jest tablica o tej właśnie nazwie
# jeśli skrypt wywołamy z "NAUTILUS SCRIPTS" obsłuży go ten warunek:
elif [ "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" == '' ] ; then
# w przypadku nie znalezienia żadnych parametrów, wychodzimy z kodem błędu "1"
exit 1
fi
# wybór katalogu docelowego
LOCATION=$(zenity --file-selection --directory --title="Wybierz folder")
# jeśli nie nacisneliśmy "OK" zostanie zwrócony kod inny niż "0" i wychodzimy z kodem błędu "1"
[ $? != 0 ] && exit 1
# pętla wykonywana dla każdego elementu w tablicy
for FILENAME in "${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[@]}" ; do
# "zenity --progress" umożliwia na bierząco zmianę informacji jeśli wyślemy ją w postaci "# text"
# tu nazwa kopiowanego/przenoszonego pliku
echo "# $FILENAME"
# obsługa błędu: "jeśli plik docelowy już istnieje"
if [ -e "$LOCATION/${FILENAME##*/}" ] ; then
zenity --question --title="Konflikt podczas wykonywania operacji" \
--text="Plik \"$LOCATION/${FILENAME##*/}\" już istnieje.\nChcesz go zastąpić?"
# jeśli klikniemy "OK" plik zostanie nadpisany, w innym przypadku pomijamy
# nie ma tu wyjścia, bo operacja odbywa się na całej tablicy plików, a nie na jednym
[ $? == 0 ] && mv -f -- "$FILENAME" "$LOCATION"
else
# normalna operacja, jeśli plik docelowy nie istnieje
mv -- "$FILENAME" "$LOCATION"
fi
done
)| zenity --progress --pulsate --auto-close --auto-kill --title="Przenoszenie plików/katalogów"