[gelöst] Verzeichnisse nach Dateinamen vergleichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

[gelöst] Verzeichnisse nach Dateinamen vergleichen

Beitrag von vobie » 14.09.2015 14:37:44

Hallo,

mein Problem:
Ich muss den Innhalt zweier Verzeichnisse nach Dateinamen und Anzahl vergleichen und die fehlenden Dateien ausgeben.

Verzeichnis A = input
Verzeichnis B = output

nach einer Bearbeitung (ocr) müssen beide Verzeichnisse die gleiche Anzahl Dateien beinnhalten,
Wichtig ist das beide Verzeichnisse die gleichen Dateinamen und deren Anzahl haben. Der Innhalt der Dateien ist uninteressant.

Sollte eine Datei nicht verarbeitet werden müsste das script diese ausgeben können

Auf Grund meiner ehr bescheidenen Shell Script kenntnisse bin ich für jeden Denkanstoss sehr dankbar.

gruß
vobie
Zuletzt geändert von vobie am 23.09.2015 15:13:53, insgesamt 1-mal geändert.
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Verzeichnisse nach Dateinamen vergleichen

Beitrag von Meillo » 14.09.2015 15:04:14

Erklaerung des Vorgehens:

1) Eine Liste aller Dateien des einen Verzeichnisses erstellen (z.B. mit find(1)) und in eine Datei schreiben
2) Das Selbe fuer das andere Verzeichnis
3) Mit comm(1) die beiden Listen vergleichen und die gewuenschten Teilmengen ausgeben lassen

Die drei Befehle sind trivial, ich haette sie dir auch gleich hingeschrieben, aber du wolltest scheinbar nur den Anstoss zum Selbermachen, was ich sehr begruesse.
Use ed once in a while!

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Verzeichnisse nach Dateinamen vergleichen

Beitrag von MSfree » 14.09.2015 15:10:36

vobie hat geschrieben:Hallo,

mein Problem:
Ich muss den Innhalt zweier Verzeichnisse nach Dateinamen und Anzahl vergleichen und die fehlenden Dateien ausgeben.

Verzeichnis A = input
Verzeichnis B = output

nach einer Bearbeitung (ocr) müssen beide Verzeichnisse die gleiche Anzahl Dateien beinnhalten,
Wichtig ist das beide Verzeichnisse die gleichen Dateinamen und deren Anzahl haben. Der Innhalt der Dateien ist uninteressant.

Sollte eine Datei nicht verarbeitet werden müsste das script diese ausgeben können

Auf Grund meiner ehr bescheidenen Shell Script kenntnisse bin ich für jeden Denkanstoss sehr dankbar.

gruß
vobie
Dateien, die nur in einem der beiden Verzeichnisse vorkommen, kann man mit diff filtern.

Wenn du Debian auf deutsch installiert hast:
diff -r input output | grep "Nur in"

Wenn du Debian auf english installiert hast:
diff -r input output | grep "Only in"

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Verzeichnisse nach Dateinamen vergleichen

Beitrag von linuxCowboy » 14.09.2015 19:25:42

Hier ist ein Script aus meinem Werkzeugkasten:

Code: Alles auswählen

Fdwd ()
{
	[ "$1" = "-h" -o "$1" = "--help" ] &&

echo	"\n\t $FUNCNAME [-r] dir1 dir2 # dwdiff 2 dirs [recursive]\n" && return

	local CMD="ls -l --almost-all --indicator-style=slash --group-directories-first --color=never ${LS_HAS_JOURNAL+-j.}"

	[ "$1" == "-r" ] && CMD="$CMD --recursive" && shift

	! [ -d "$1" -a -d "$2" ] && echo not 2 dirs && return

	echo "$CMD '$1' '$2'  +  dwdiff"
	ex

	local D1=`$CMD --time-style='+%d.%m. %Y %T' $1`
	local D2=`$CMD --time-style='+%d.%m. %Y %T' $2`

	\dwdiff -c -C0 \
		<(echo "$D1" | perl -nE 'say "$2|| $1$4" if /^(?:\S+\s+){4}(\S+\s+)((\S+\s+){3})(.*)/')\
		<(echo "$D2" | perl -nE 'say "$2|| $1$4" if /^(?:\S+\s+){4}(\S+\s+)((\S+\s+){3})(.*)/')
	echo
	if [ "$LS_HAS_JOURNAL" ]; then
		echo "$D1" | tail -1
		echo "$D2" | tail -1
	fi
}

alias ex='(for i in {1..25};do echo;done)'
dwdiff zeigt Unterschiede farblich an!
-der_linux_cowboy --- Besser werden! ... f*** w$$

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Verzeichnisse nach Dateinamen vergleichen

Beitrag von vobie » 23.09.2015 15:13:23

Vielen Danke euch allen, ihr habt mir sehr geholfen.

Alle Varianten haben funktioniert.

Gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Antworten