wenis hat geschrieben:Hallo in die Runde,
Hallo und Willkommen im Forum.
Code: Alles auswählen
#! /bin/bash
find . -type f | while read ff
do
base=$(basename "$ff")
mod=$(stat -c %y "$ff")
echo "$base;$mod;$ff"
done | sort | awk -F ';' ' BEGIN { FIL=""; }
{
if ( $1 == FIL ) {
print "+++ das ist doppelt: " $3
next;
}
FIL=$1;
}'
Ich habe das Skript getestet und es zeigt auch gut die doppelten Dateien an,
Naja, gut scheint es mir nicht zu funktionieren. Es kann zwei Dateien als doppelt listen, die zwar gleich heissen, aber unterschiedlich gross sind. Zudem wird ja gar nicht anhand der Zeit verglichen. Es wird zwar nach ihr sortiert, aber das reicht noch nicht.
Ein besseres Programm ist
fdupes.
Unabhaengig davon zu deiner Frage:
Nachdem der Dateiname und das Änderungsdatum in die Variablen gespeichert wurde wird alles mit sort sortiert und dann irgendwie an den awk Teil weitergeleitet.
Korrekt. Das ``irgendwie'' ist eine Pipe.
FIL wird leer gemacht
Wie shoening geschrieben hat, ist das im BEGIN-Block, wird also nur einmal beim Programmstart ausgefuehrt. Zudem ist es unnoetig, da bei awk alle Variablen automatisch mit Null bzw. dem Leerstring initialisiert sind.
Ich denke mit dem Hinweis auf die Semantik des BEGIN-Blocks ist es klar geworden.