Użytkownik:Borzole/copy-to

Z Fedora Wiki

#!/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/copy-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 ] && cp -a -f -- "$FILENAME" "$LOCATION"
		else
			# normalna operacja, jeśli plik docelowy nie istnieje
		   cp -a -- "$FILENAME" "$LOCATION"
		fi
	done
)| zenity --progress --pulsate 	--auto-close --auto-kill --title="Kopiowanie plików/katalogów"