76 lines
2.5 KiB
Bash
76 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Zielverzeichnis für die konsolidierten Monatsordner
|
|
TARGET_DIR="./consolidated"
|
|
mkdir -p "$TARGET_DIR"
|
|
|
|
# Zähle die Gesamtanzahl der zu verarbeitenden Verzeichnisse
|
|
total_dirs=$(ls -d [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9] 2>/dev/null | wc -l)
|
|
processed_dirs=0
|
|
total_files=0
|
|
copied_files=0
|
|
|
|
# Funktion zum Kopieren der neuesten Version einer Datei mit relativer Pfadstruktur
|
|
copy_latest_file_with_path() {
|
|
local source_file="$1"
|
|
local base_dir="$2"
|
|
local target_month_dir="$3"
|
|
|
|
# Relativen Pfad der Datei innerhalb des Basisverzeichnisses extrahieren
|
|
local relative_path="${source_file#$base_dir/}"
|
|
local target_file="$target_month_dir/$relative_path"
|
|
|
|
# Zielverzeichnis für die Datei erstellen (falls nicht vorhanden)
|
|
mkdir -p "$(dirname "$target_file")"
|
|
|
|
# Prüfe, ob die Datei bereits existiert und ob die aktuelle Datei neuer ist
|
|
if [ -f "$target_file" ]; then
|
|
if [ "$source_file" -nt "$target_file" ]; then
|
|
cp -f "$source_file" "$target_file"
|
|
((copied_files++))
|
|
fi
|
|
else
|
|
cp "$source_file" "$target_file"
|
|
((copied_files++))
|
|
fi
|
|
((total_files++))
|
|
}
|
|
|
|
# Fortschrittsbalken anzeigen
|
|
print_progress() {
|
|
local current=$1
|
|
local total=$2
|
|
local percent=$((current * 100 / total))
|
|
local bar_length=50
|
|
local filled=$((current * bar_length / total))
|
|
local empty=$((bar_length - filled))
|
|
|
|
printf "\rFortschritt: ["
|
|
printf "%${filled}s" | tr ' ' '='
|
|
printf "%${empty}s" | tr ' ' ' '
|
|
printf "] %d%% (%d/%d Verzeichnisse, %d Dateien kopiert)" "$percent" "$current" "$total" "$copied_files"
|
|
}
|
|
|
|
# Durch alle Verzeichnisse im Format Jahr-Monat-Tag-Stunde iterieren
|
|
for dir in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
|
|
# Extrahiere Jahr und Monat aus dem Verzeichnisnamen
|
|
if [[ "$dir" =~ ([0-9]{4})-([0-9]{2})-([0-9]{2})-([0-9]{2}) ]]; then
|
|
year="${BASH_REMATCH[1]}"
|
|
month="${BASH_REMATCH[2]}"
|
|
|
|
# Monatsverzeichnis im Zielverzeichnis erstellen
|
|
month_dir="$TARGET_DIR/${year}-${month}"
|
|
mkdir -p "$month_dir"
|
|
|
|
# Rekursiv durch alle Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen iterieren
|
|
find "$dir" -type f | while read -r file; do
|
|
copy_latest_file_with_path "$file" "$dir" "$month_dir"
|
|
done
|
|
|
|
((processed_dirs++))
|
|
print_progress "$processed_dirs" "$total_dirs"
|
|
fi
|
|
done
|
|
|
|
# Zeilenumbruch nach der Fortschrittsanzeige
|
|
echo -e "\nFertig! $total_files Dateien geprüft, $copied_files Dateien kopiert." |