ubuntuusers.de

Diff: Datei mit Ordnerinhalt vergleichen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Luke12

Anmeldungsdatum:
25. März 2014

Beiträge: 26

Hallo Leute!

Wie kann ich einen Ordner Inhalt mit einer Text Datei vergleichen? Also den Inhalt einer Datei auslesen und mit dem Inhalt eines Ordner vergleichen??

Habe es mit diff -q /home /test/datei.txt versucht aber das ging leider nicht!

Mfg

Bearbeitet von sebix:

Bitte wähle in Zukunft einen aussagekräftigen Titel!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Grundsätzlich kannst Du ja nur gleiches mit gleichem vergleichen, also Datei mit Datei oder Verzeichnis mit Verzeichnis.

Ok, Du kannst das Verzeichnis mit Hilfe einer Process Substitution dem diff- Befehl zuspielen, als wenn es eine Datei wäre:

1
diff  <(ls ./test)  ls_vergleich.txt

aber dann musst Du natürlich immer noch gucken, dass die beiden Listen nach Reihenfolge und Format gleich sind.

LG,

track

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11269

Wohnort: München

Ich würde aus den Daten zwei sets machen und die vergleichen, dann spielt die Sortierung keine Rolle:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env python3
import os
import sys

if len(sys.argv) != 3:
    print("Usage:", sys.argv[0], "FOLDER TEXTFILE")
    sys.exit(1)

real_content = set(os.listdir(sys.argv[1]))
with open(sys.argv[2]) as f:
    txt_content = set(f.read().splitlines())

print("in text file but not in folder:")
for e in (txt_content - real_content): print(e)
print("in folder but not in text file:")
for e in (real_content - txt_content): print(e)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

Luke12 schrieb:

Wie kann ich einen Ordner Inhalt mit einer Text Datei vergleichen? Also den Inhalt einer Datei auslesen und mit dem Inhalt eines Ordner vergleichen??

Willst Du schauen, ob die in der Datei genannten Dateinamen auch im Verzeichnis auftauchen? Das ginge z.B. so:

1
2
3
4
# einfach
diff -U5 <(sort /test/datei.txt) <(printf '%s\n' * | sort)
# rekursiv
diff -U5 <(sort /test/datei.txt) <(find | sort)

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Das mit den Sets ginge auch in Ruby:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env ruby
require "set"


def print_result(names)
    names.sort.each { |name| puts "  #{name}" }
end


def main
    if ARGV.length == 2
        directory_name = ARGV[0]
        file_name = ARGV[1]
        names_from_folder = Dir.entries(directory_name).to_set
        names_from_file = File.foreach(file_name).map { |line| line.chomp }.to_set
        puts "in text file but not in folder:"
        print_result(names_from_file - names_from_folder)
        puts "in folder but not in text file:"
        print_result(names_from_folder - names_from_file)
    else
        puts "Usage: #{$PROGRAM_NAME} FOLDER TEXTFILE"
        exit 1
    end
end


main if __FILE__ == $PROGRAM_NAME

Luke12

(Themenstarter)

Anmeldungsdatum:
25. März 2014

Beiträge: 26

Danke für eure Hilfe 👍

Mfg Luke12

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Luke12 schrieb:

Hallo Leute!

Wie kann ich einen Ordner Inhalt mit einer Text Datei vergleichen? Also den Inhalt einer Datei auslesen und mit dem Inhalt eines Ordner vergleichen??

Habe es mit diff -q /home /test/datei.txt versucht aber das ging leider nicht!

Am einfachsten, wenn Du die Datei mit md5sum angelegt hast:

1
2
md5sum * > xydir.md5sum 
md5sum -c xydir.md5sum

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

user_unknown schrieb:

Am einfachsten, wenn Du die Datei mit md5sum angelegt hast:

Man sollte aber erwähnen, dass das lange dauern kann, wenn das Volumen der Dateien im Verzeichnis groß ist, weil die Dateien komplett gelesen werden müssen.

Antworten |