Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/03/2015, 06:42
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Practica backup

2 - No hay forma directa de comprobar que un directorio no está vacío, no existe un "-s" para directorios. Sin embargo, hay opciones que podés usar. Para esta clase de dudas te recomiendo el sitio http://mywiki.wooledge.org/BashFAQ/, que tiene muchas soluciones para problemas como este. El ejemplo que pongo a continuación es del mismo sitio (http://mywiki.wooledge.org/BashFAQ/004)
Código BASH:
Ver original
  1. cd directorio_donde_vas_a_buscar
  2. # el siguiente comando shopt ('shell option') cambia la forma en que BASH expande los globs:
  3. # - nullglob: si el * no coincide con ningún archivo, desaparece en vez de generar una entrada *
  4. # - dotglob: * no coincide con las entradas '.' y '..' que existen en todo directorio
  5. shopt -s nullglob dotglob
  6. # creamos una matriz donde cada entrada es un archivo o directorio dentro del directorio actual
  7. files=(*)
  8. # en $files tenemos todas las entradas, bastaría con hacer un if que compruebe que ${#files[@]} es mayor que cero
  9. echo "The current directory contains ${#files[@]} things."
También podés simplemente iterar sobre todos los subdirectorios de ~/importante con un código como este:
Código bash:
Ver original
  1. for DIR in ~/importante; do
  2.     if [[ -d $DIR ]]; then
  3.         # DIR es un directorio, seguir
  4.     else
  5.         # DIR no es un directorio, saltear
  6.     fi
  7. done

5,21- La forma correcta es
Código BASH:
Ver original
  1. VAR=$(comando)
o
Código BASH:
Ver original
  1. VAR=`comando`
Lo que te está fallando es que NO debe haber espacios entre el nombre de la variable y el signo de igual, ni entre el signo de igual y el valor que se quiere asignar a la variable. En tu caso, deberías usar
Código BASH:
Ver original
  1. fecha=$(date +%Y%m%d)
, siendo en este caso opcionales las comillas en el argumento de date

13- Si ese es el caso, lo que debes hacer es algo como
tar -zcvf /media/backup/$nombre .
El punto al final es el directorio que querés comprimir, la idea es que uses el nombre del directorio que querés comprimir. Lee el manual de tar para conocer el orden de los parámetros.

14- Esto lo podés hacer comprobando el código de salida de tar, o probando si el archivo .tgz existe. En ambos casos usas variantes de if

17- Cuidado con eso, porque una línea antes estás borrando $fichero, con lo que el mv te fallaría siempre. Creo que quisiste decir que sería $nombre, no $fichero. En cualquier caso, si arreglas la línea de tar como te lo sugiero arriba, este mv es innecesario.

A propósito: no uses sudo en scripts. En vez de eso, asegúrate de que los permisos en los archivos y carpetas sobre los que vas a trabajar son los apropiados para que todo funcione.


Saludos.