martes, 2 de febrero de 2010

Copiar o mover un archivo a cualquier directorio con un script

Para copiar o mover un archivo, de forma gráfica,  desde /home/usuario a un directorio del sistema ( directorio / y sus subdirectorios ) hay que hacerlo ejecutando un Nautilus con permisos de root, con la orden: gksu nautilus. Esto es así porque los directorios del sistema no tienen permisos de escritura para un usuario que no sea el root.

Los pendrives y/o discos duros externos o particiones adicionales creadas en formato fat32 o ntfs, o incluso en ext3 o ext4 para almacenar datos si que suelen tener permisos de escritura para el usuario normal, pero si solo  tuvieran permisos de escritura para el usuario root, podríamos copiar o mover a ellos archivos desde /home/usuario con los scripts de este tema.

Para copiar ( o mover ) un archivo en un directorio cualquiera, distinto de /home/usuario,  sin necesidad de entrar en un Nautilus con permisos de root: desde    http://gnome-look.org/content/show.php/Nautilus+Scripts+Pack?content=90330 he bajado un paquete de scripts de nautilus, entre los que esta Copy to y Move to; Con estos scripts puedo copiar/mover respectivamente en cualquier directorio:
Si es en uno que se necesite permisos de root me pide la contraseña antes de hacerlo, y luego lo hace, y si es en uno que no necesita permisos de root no pide la contraseña, y lo copia o mueve.

Estos scripts para Nautilus se instalan en la carpeta /home/usuario/.gnome2/nautilus-scripts, y se tiene acceso a ellos en Nautilus >botón secundario >menú Scripts

Es decir,  una vez tenemos el script en esa dirección elegimos el archivo que queremos copiar ( o mover ), damos al botón derecho del ratón y vamos al menú contextual Scripts , en el que se verán todos los scripts que tengamos en esa carpeta (/home/usuario/.gnome2/nautilus-scripts ).elegimos el script Copy to o el Movy to según si lo queremos copiar o mover. Una vez hecho esto  se abre un pequeño administrador de archivos en el que elegimos el directorio al que queremos copiar o mover el archivo, y nos pide la contraseña si es necesario ( si lo queremos copiar o mover a un directorio del sistema que sea distinto al /home/usuario ).

Os dejo estos dos scripts porque creo que son muy útiles para copiar o mover archivos a directorios del sistema, sin el peligro de abrir un Nautilus con permisos de root.

El texto del script Copy to es tal que así:

#!/bin/bash
#########################################################
#                     #
# This are NScripts v3.4            #
#                     #
# Licensed under the GNU GENERAL PUBLIC LICENSE 3   #
#                     #
# Copyright 2007 - 2008 Christopher Bratusek      #
#                     #
#########################################################


if [[ -x /usr/bin/gksu || -x /opt/gnome/bin/gksu ]]; then
sudotool="gksu -u root"
elif [[ -x /usr/bin/gnomesu || -x /opt/gnome/bin/gnomesu ]]; then
sudotool=gnomesu
fi


destination=$(zenity --file-selection --directory --title "Where to copy files?")

echo $NAUTILUS_SCRIPT_SELECTED_URIS > ~/.gnome2/temp_copy_list

for file in $(cat ~/.gnome2/temp_copy_list); do \

file_name=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g')
short_file_name=$(echo $file | sed -e 's#.*/##g' -e 's/\%20/\ /g')


if [[ -w $destination && -a $destination/$short_file_name ]]; then \
confirm=$(zenity zenity --question --text "Overwrite File $destination/$short_file_name?"; echo $?)
if [[ $confirm == 0 ]]; then
cp -r "$file_name" $destination
if (( $? != 0 )); then
zenity --info --text "Something went wrong" --title "Failure"
fi
fi
elif [[ -w $destination ]]; then \
cp -r "$file_name" $destination
if (( $? != 0 )); then
zenity --info --text "Something went wrong" --title "Failure"
fi
elif [[ -a $destination && $sudotool != "" ]]; then
$sudotool "cp -r '$file_name' $destination"
else   zenity --info --title "Failure" --text "$destination does either not\nexist or is not writable"
fi; \
done


rm -f ~/.gnome2/temp_copy_list
--------------
El texto del script Move to es así:


#!/bin/bash
#########################################################
#                     #
# This are NScripts v3.4            #
#                     #
# Licensed under the GNU GENERAL PUBLIC LICENSE 3   #
#                     #
# Copyright 2007 - 2008 Christopher Bratusek      #
#                     #
#########################################################


if [[ -x /usr/bin/gksu || -x /opt/gnome/bin/gksu ]]; then
sudotool="gksu -u root"
elif [[ -x /usr/bin/gnomesu || -x /opt/gnome/bin/gnomesu ]]; then
sudotool=gnomesu
fi


destination=$(zenity --file-selection --directory --title "Where to move files?")

echo $NAUTILUS_SCRIPT_SELECTED_URIS > ~/.gnome2/temp_move_list

for file in $(cat ~/.gnome2/temp_move_list); do \

file_name=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g')
short_file_name=$(echo $file | sed -e 's#.*/##g' -e 's/\%20/\ /g')


if [[ -w $destination && -a $destination/$short_file_name ]]; then \
confirm=$(zenity zenity --question --text "Overwrite File $destination/$short_file_name?"; echo $?)
if [[ $confirm == 0 ]]; then
mv "$file_name" $destination
if (( $? != 0 )); then
zenity --info --text "Something went wrong" --title "Failure"
fi
fi
elif [[ -w $destination ]]; then \
mv "$file_name" $destination
if (( $? != 0 )); then
zenity --info --text "Something went wrong" --title "Failure"
fi
elif [[ -a $destination && $sudotool != "" ]]; then
$sudotool "mv '$file_name' $destination"
else   zenity --info --title "Failure" --text "$destination does either not\nexist or is not writable"
fi; \
done


rm -f ~/.gnome2/temp_move_list

------------------------

Para, con el texto de los scripts, crear un script : Como crear un script básico
------------------------



2 comentarios:

  1. Hay alguna forma de hacerlo si estoy con un ubuntu live usb???, porque mi disco duro no arranca.
    Muchas gracias.

    ResponderEliminar
  2. albatrin:
    Quizás un poco tarde...no lo había leído...perdona por ello.
    Se puede hacer de la misma forma que con el disco duro del pc: se crean los scripts, se copian en la carpeta /home/usuario/.gnome2/nautilus-scripts, y se tiene acceso a ellos en Nautilus >botón secundario >menú Scripts
    Aunque según como* tengas instalado el Ubuntu en el live-usb, quizás tengas que repetir los pasos cada vez que reinicies el pendrive.
    * Si lo tienes instalado de forma que no se guarden los cambios tendrás que repetir la instalación de los scripts cada vez que reinicies el pendrive.

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.