Gast
#5534579
Hallo Ich möchte Dateien suchen die außer Buchstaben, Leerzeichen und/oder Zahlen auch andere Zeichen beinhalten. Wie stell ich sowas an unter Windows? Evtl auch unter Linux?
|
Anzeige
|
Dateinamen suchen mit bestimmten Charaktern
Gast
#5534579
Hallo Ich möchte Dateien suchen die außer Buchstaben, Leerzeichen und/oder Zahlen auch andere Zeichen beinhalten. Wie stell ich sowas an unter Windows? Evtl auch unter Linux?
Gast
#5534582
> Evtl auch unter Linux?
man find
HTH
Den Dateinamen in Anführungszeichen setzen. C:\>dir "* *" /s sucht alle Dateinamen auf der Platte, die ein Leerzeichen enthalten Das listet auch Verzeichnisnamen auf. Möchte man nur Dateinamen sehen, sollte noch ein /A-D angehängt werden.
Gast
#5534684
Kleiner Paul schrieb: > auch andere Zeichen beinhalten Linux - auflisten von Dateinamen, welche die Zeichen #, @, oder ö enthalten: find /pfad/welcher/durchsucht/werden/soll/ | grep -e"#" -e"@" -e"ö" HTH
Gast
#5534729
2 Cent schrieb: > Kleiner Paul schrieb: >> auch andere Zeichen beinhalten > > Linux - auflisten von Dateinamen, und Verzeichnisnamen > welche die Zeichen #, @, oder ö > enthalten: > > find /pfad/welcher/durchsucht/werden/soll/ | grep -e"#" -e"@" -e"ö" $ find /pfad ~/noapfad -type f | grep -P '(#|@|ö)' #nur Files $ find /pfad ~/noapfad -type d | grep -P '(#|@|ö)' #nur Directories
Gast
#5534731
2 Cent schrieb: > Kleiner Paul schrieb: >> auch andere Zeichen beinhalten > > Linux - auflisten von Dateinamen, welche die Zeichen #, @, oder ö > enthalten: > > find /pfad/welcher/durchsucht/werden/soll/ | grep -e"#" -e"@" -e"ö" > > HTH ich möchte aber alle sonderzeichen finden. also alles außer buchstaben und zahlen Dann wirst Du Dir die Syntax von grep ansehen müssen, wie man dort eine regex angibt, die alle zeichen außer [0..9][a..z][A..Z] und ' ' auswirft.
Gast
#5534737
> C:\>dir "* *" /s > sucht alle Dateinamen auf der Platte, die ein Leerzeichen enthalten dir mit mehr als einem '*' hat mich des öfteren angelogen und vorhandene Dateien nicht angezeigt, unter div. Varianten von WinYX :-( BTDT. Kommandozeile vor dem Frühstück für Alle! schrieb: > dir mit mehr als einem '*' hat mich des öfteren angelogen Aha. Magst Du konkrete Beispiele nennen, und auch die Windows-Versionen? Zwischen Windows 95 und seinen Aufgüssen und den ernstgemeinten Windows-Versionen besteht hier ein essentieller Unterschied. Wenn man auch Dateien mit Newlines im Pfad berücksichtigen will, würde ich das unter Linux so machen:
Das '[^a-zA-Z0-9 ]' ist ein Regex. Das ^ gibt an, das jedes Zeichen, das nicht in der Liste ist, gematcht werden soll. Das ganze while read und printf zeug ist nur zur Behandlung der Newlines, wenn man die nicht hat kann man das natürlich auch weglassen:
Hallo Kleiner, Kleiner Paul schrieb: > ich möchte aber alle sonderzeichen finden. also alles außer buchstaben > und zahlen Du durchläufst den Verzeichnisbaum in der Programmiersprache Deiner Wahl und prüfst pro Dateinamen für jeden Buchstaben den ASCII-Code, ob er in den Nummernblöcken der Zahlen, Klein- oder Großbuchstaben liegt. Wenn im Dateisystem alles mit Unicode abgebildet wird, ist das auch kein Problem, weil im Bereich bis 127 die ASCII-Codes den Unicode-Codepoints entsprechen. Eine fertige Software dafür kenne ich nicht.
Gast
#5534746
>> find /pfad/welcher/durchsucht/werden/soll/ | grep -e"#" -e"@" -e"ö" > > ich möchte aber alle sonderzeichen finden. also alles außer buchstaben > und zahlen Lerne u.A. auch mit den POSIX CHARACTER CLASSES umzugehen, es lohnt sich! Das sind z.B. ":punct:" * http://www.pcre.org/pcre.txt
Gast
#5534752
Peter M. schrieb: > Hallo Kleiner, > > Kleiner Paul schrieb: > >> ich möchte aber alle sonderzeichen finden. also alles außer buchstaben >> und zahlen > > Du durchläufst den Verzeichnisbaum in der Programmiersprache Deiner Wahl > und prüfst pro Dateinamen für jeden Buchstaben den ASCII-Code, ob er in > den Nummernblöcken der Zahlen, Klein- oder Großbuchstaben liegt. In Python3 sind ALLE Strings per default Unicode. import os, re # Nicht vergessen! :-) > Wenn im Dateisystem alles mit Unicode abgebildet wird, ist das auch kein > Problem, weil im Bereich bis 127 die ASCII-Codes den Unicode-Codepoints > entsprechen. > > Eine fertige Software dafür kenne ich nicht. find um Verzeichnishierarchien zu durchpflügen und grep um nach Muster zu suchen ...beides seit Jahrzehnten fertig . Kommandozeile vor dem Frühstück für Alle! schrieb: > Peter M. schrieb: >> Eine fertige Software dafür kenne ich nicht. > find um Verzeichnishierarchien zu durchpflügen > und > grep um nach Muster zu suchen > > ...beides seit Jahrzehnten fertig . Interessant! Wusste nicht, dass Grep nach mehreren Mustern suchen kann. Dann müsste kleiner Paul sich nur einmal die Suchdatei mit allen Sonderzeichen konfigurieren.
Gast
#5534768
Vielleicht auch noch auf mehreren Laufwerken (was auch immer diese sein sollen...) gleichzeitig? Z.B. C: D: E: F: G: H: W: Z:
Oder weil sequentiell so langsam ist, parallel: (ok, die Ergebnisse prasseln durcheinander auf den User zu; dies zu ordnen ist Hausaufgabe zum Stoff vom Aufbaukurs ;-)
Gast
#5534774
>>> Eine fertige Software dafür kenne ich nicht. >> find um Verzeichnishierarchien zu durchpflügen >> und >> grep um nach Muster zu suchen >> >> ...beides seit Jahrzehnten fertig . > > Interessant! Wusste nicht, dass Grep nach mehreren Mustern suchen kann. Tja, wenn man sich nicht mit EDV aus der Zeit von VOR den PeeZeehs auseinandersetzen will so verpasst man halt mehr als die Hälfte an Nützlichkeiten... * https://en.wikipedia.org/wiki/Grep -->Jahrgang! Hallo Kommandozeile und kleiner Paul, Kommandozeile vor dem Frühstück für Alle! schrieb: > Vielleicht auch noch auf mehreren Laufwerken (was auch immer diese > sein sollen...) gleichzeitig? > Z.B. C: D: E: F: G: H: W: Z:$ find /cygdrive/[czwd-h]/ -type f | grep -P > ':punct:' > > Oder weil sequentiell so langsam ist, parallel: (ok, die Ergebnisse > prasseln durcheinander auf den User zu; dies zu ordnen ist Hausaufgabe > zum Stoff vom Aufbaukurs ;-)$ for do in /cygdrive/[czwd-h]/ >> do >> ( find "$dp" -type f | grep -P ':punct:' ) & >> done das sieht ja elegant kurz aus, aber "grep -P" ist hier https://www.gnu.org/software/grep/manual/grep.html#Matching-Control als "highly experimental" gekennzeichnet. @kleiner Paul: Das Beispiel von "Kommandozeile" bezieht sich auf Windows-Maschinen. Der Ordner "cygdrive" ist dann vorhanden, wenn man sich die Software "cygwin" installiert. Damit hat man so eine Art abgespeckte Unix-Shell. Insbesondere hat man einen Unix-Verzeichnisbaum. Die Windowslaufwerke verstecken sich in dem Baum im Ordner "cygdrive". find /cygdrive/c/ -type f | grep -P ':punct:' Folgende Zeichen werden mit dem punct-Ausdruck gefunden: `[:punct:]' Punctuation characters: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~. Quelle: http://www.delorie.com/gnu/docs/grep/grep_8.html Ich hab's aber selber noch nicht ausprobiert.
Gast
#5534834
Der find, der unter Linux normalerweise installiert ist (GNU find), kann direkt nach Regulären Ausdrücken filtern:
Gast
#5534869
Oder, falls die Namen der Verzeichnisse egal ist:
Gast
#5534962
Danke für die Anregung und die vielen guten Ideen hier :D Nach vielen Stunden hacken (das Problem lässt mich nicht los) mein bis jetzt bester Einzeiler: find /pfad/welcher/durchsucht/werden/soll/ ! -regex ".*/[a-zA-Z0-9 ._-\(\)\ #&]*" Da kommts halt auch sehr darauf an, was als "Sonderzeichen" gemeint ist. Auf jeden Fall interessant was so alles "vom russischen Bahnhof" auf meiner Platte rumliegt :D Cheerio!
Gast
#5534992
Damit man das Dateisystem nicht so belasten muss (wie bei find), kann man einfach locate benutzen. Kann auch mit REGEX umgehen. Das speichert alle Dateinamen in einer eigenen Datenbank und ist auf vielen Linux-Systemen schon installiert. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|