2016-07-19 13 views
1

Ich bin ein Interner und erhielt eine Aufgabe zum Erstellen eines BASH-Skripts zum Löschen von Dateien in einem Verzeichnis älter als 60 Tage und exportiert dann eine Textdatei, die die Anzahl der gelöschten Dateien sowie die Menge der entfernten Daten enthält. Ich versuche immer noch, BASH zu lernen und habe einen einzigen Liner, um Dateien zu entfernen, die älter als 30 Tage sind;BASH-Skript zum Entfernen alter Dateien und zum Erstellen einer Textdatei, die die Anzahl und Größe aller gelöschten Dateien enthält.

Ich bin immer noch aktiv versucht, BASH zu lernen, so dass zusätzliche Notizen zu jeder Antwort sehr geschätzt werden!

P.S. Ich fand Bash Academy, aber sieht aus wie die Seite unvollständig ist, werden alle Empfehlungen für weitere Lektüre in meiner Suche nach bash auch sehr geschätzt werden!

Antwort

1

würde ich das unten stehende Skript verwenden, sagen deleter.sh zum Zweck:

#!/bin/bash 
myfunc() 
{ 
    local totalsize=0 
    echo " Removing files listed below " 
    echo "${@}" 
    sizes=($(stat --format=%s "${@}")) #storing sizes in an array. 
    for i in "${sizes[@]}" 
    do 
    ((totalsize += i)) #calculating total size. 
    done 
    echo "Total space to be freed : $totalsize bytes" 
    rm "${@}" 
    if [ $? -eq 0 ] #$? is the return value 
    then 
    echo "All files deleted" 
    else 
    echo "Some files couldn't be deleted" 
    fi 
} 
export -f myfunc 
find "$1" -type f -not -name "*deleter.sh" -mtime +60\ 
-exec bash -c 'myfunc "[email protected]"' _ {} + 
# -not -name "*deleter.sh" to prevent self deletion 
# Note -mtime +60 for files older than 60 days. 

chmod +x ./deleter.sh 

tun und es als

./deleter '/path/to/your/directory' 

Referenzen laufen

  1. Finden Sie [ manpage ] für weitere Informationen.
  2. stat --format=%s gibt Größe in Bytes, die wir in einem Array speichern. Siehe [ stat ] Manpage.

Feedback geschätzt

+0

Nizza :) erwähnenswert, dass '{} +' mit find baut die Befehlszeile –

+1

Danke @sjsam, das ist erstaunlich, viel sauberer als das, was ich arbeitete weiter, falls Sie interessiert sind, hier ist, was ich mir ausgedacht habe; #!/Bin/bash date = $ (date +% F) # Erstellt eine Textdatei mit der Ausgabe des Befehls find. find -type f -mtime -60> /tmp/$date.text cp /tmp/$date.text/root #Liest die $ date-Datei und entfernt die darin aufgeführten Dateien. xargs -a /tmp/$date.text -d '\ n' rm – BasicsAG

+0

Sie ist viel sauberer und erstellt nicht die Datei, die meins tut. Ich habe viel zu lernen! Auch, @mona_sax dankt Ihnen für die Info! – BasicsAG