Szenario:
Mit Locky Virus auf randalieren das Rechenzentrum ich für die einzige Methode der Wiederherstellung von Dateien gefunden haben, arbeiten wird Tools wie Recuva nun das Problem mit, dass die Verwendung Es speichert alle wiederhergestellten Dateien in einem einzigen Verzeichnis. Ich würde gerne alle diese Dateien basierend auf ihren Dateierweiterungen in Kategorien verschieben. Alle JPG in einem BMP in einem anderen ... etc. Ich habe mich in Stackoverflow umgesehen und basierend auf verschiedenen anderen Fragen und Antworten konnte ich ein kleines Bash-Skript (Beispiel zur Verfügung gestellt) erstellen, das es aber immer braucht, bis es fertig ist Ich denke, ich habe die Erweiterungen durcheinander gebracht.Effeciantly in bash eine halbe Million Dateien basierend auf Erweiterung bewegen
Code:
#!/bin/bash
path=$2 # Starting path to the directory of the junk files
var=0 # How many records were processed
SECONDS=0 # reset the clock so we can time the event
clear
echo "Searching $2 for file types and then moving all files into grouped folders."
# Only want to move Files from first level as Directories are ok were they are
for FILE in `find $2 -maxdepth 1 -type f`
do
# Split the EXT off for the directory name using AWK
DIR=$(awk -F. '{print $NF}' <<<"$FILE")
# DEBUG ONLY
# echo "Moving file: $FILE into directory $DIR"
# Make a directory in our path then Move that file into the directory
mkdir -p "$DIR"
mv "$FILE" "$DIR"
((var++))
done
echo "$var Files found and orginized in:"
echo "$(($diff/3600)) hours, $((($diff/60) % 60)) minutes and $(($diff % 60)) seconds."
Frage:
Wie kann ich diese effiziente, während sie mit 500.000 Dateien zu tun? Der Fund braucht eine Ewigkeit, um eine Liste von Dateien zu erfassen und versucht in der Schleife ein Verzeichnis zu erstellen (selbst wenn dieser Pfad bereits vorhanden ist). Ich möchte diese beiden besonderen Aspekte der Schleife, falls möglich, effizienter behandeln.
Ich denke Ihre Frage ist "Wie kann ich das schneller machen?" und die Konzentration auf das 'find' und das' mkdir' sind deine Theorien, die auf dem basieren, was du über 'mkdir' weißt und was du interaktiv gesehen hast, als das Skript ausgeführt wurde. Wenn Sie es schneller machen wollen, sollten Sie messen, wie schnell diese Teile sind, um den wahren Flaschenhals zu identifizieren. –
Wenn Sie nicht wissen, dass alle zu verschiebenden Dateien nette Dateinamen ohne Leerzeichen oder Zeichen mit spezieller Bedeutung für die Shell haben, ist Ihre For-Schleife unterbrochen. – chepner
Eine halbe Million "awk" -Prozesse zu fahren ist nicht ideal. Verwenden Sie die Bash-Parameterersetzung, um die Erweiterung zu erhalten. –