2016-06-06 10 views
1

Eine Auktion Skript hat die Verzeichnisstruktur folgendeWie während Teer eine Kombination von Dateien und Verzeichnissen ohne

/var/www/html/ 
       file1 
       file2 

/var/www/html/subdir1/ 
/var/www/html/subdir2/ 
/var/www/html/subdir3/ 
/var/www/html/subdirN/ 

/var/www/html/uploaded/ 
         .htaccess    
         file3 
         file4 

         /banners/ 
           file5 
           file6 

         /cache/ 
          file7   <<< exclude 
          file8   <<< exclude 

         /hledmd7phk4u5glq5rks8kb621/  <<< exclude 
                file9 <<< exclude 
                file10 <<< exclude 
         /ad0hmd7phk4u5glq5rks8kb258/  <<< exclude 
                file11 <<< exclude 
                file12 <<< exclude 
         /zfddfd7phk4u5glq5rks8kb584/  <<< exclude 
                file13 <<< exclude 
                file14 <<< exclude 

A Ubuntu 14.04 Teer in crontab -en nächtlichen derzeit wird ausgeführt, dass das gesamte Verzeichnis sichert ab die/var/www/html/level mit absoluten Pfaden. Ein neuer tar backup-Befehl wird benötigt, der die Größe der nächtlichen Sicherung reduziert, indem die oben gezeigte Kombination von Dateien und Verzeichnissen ausgeschlossen wird:

1) einschließlich des Verzeichnisses/var/www/html/uploaded/cache/while excluded der Inhalt unter/var/www/html/hochgeladen/cache/

2) ohne die lange Liste der ständig wechselnden MD5 Verzeichnisnamen und deren Inhalte, die unter/var erstellt/www/html// hochgeladen

Gibt es eine Möglichkeit, dies in einem tar-Befehl zu tun?

Antwort

0

keine endgültige Lösung für Sie, aber hier ist eine Richtlinie Denkweise:

Für die erste Anforderung können wir Platzhalter wie folgt verwenden:

tar -cvf test.tgz --exclude=/var/www/html/uploaded/cache/* 

Für die zweite Anforderung, MD5 als Ein Dateiname hat kein Zeichenfolgenmuster, daher sollten weitere Informationen hinzugefügt werden, um diese Verzeichnisse zu filtern.

@ ml48603, für wie tar Befehl strcat, hier ein Beispiel:

tar_all_cmd=tar -cvf test.tgz 

dir_name="/var/www/html/uploaded/" 

ls $dir_name | while read filename; do if [ ${#filename} -ge 8 ]; then $option_head="--exclude=$dir_name"; tar_all_cmd="${tar_all_cmd}${option_head}${filename}"; fi; done; 
+0

1. Platz:/cache/* wird alles im Cache greifen, nicht nur Cache, richtig? 2.: Die MD5-Dirs sind die einzigen dir-Namen, die mit einer Länge von 8 Zeichen oder mehr vorhanden sind, da der längste dir-Name/banners/bei 7 Zeichen lang ist. – ml48603

+0

@ ml48603 1. alles, was du im Cache hast, aber nicht Cache-Verzeichnis selbst; 2. große Erkenntnis, komplexere Schale sollte diese Anforderung dann erfüllen. – lulyon

+0

Bietet tar ein Muster für Verzeichnisnamen, die größer als eine festgelegte Anzahl von Zeichen sind? Ich habe noch kein Shell-Skript geschrieben. Aber es sieht so aus, als wäre es eine perfekte Zeit, um das zu lernen. Mein Ubuntu-Server läuft/bin/bash shell nach # echo $ SHELL – ml48603

Verwandte Themen