Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Linux: wie finde ich "unmögliche" zeichen in dateinamen?

Frage Entwicklung Batch & Shell

Mitglied: klausph

klausph (Level 1) - Jetzt verbinden

04.02.2015, aktualisiert 13:47 Uhr, 780 Aufrufe, 5 Kommentare, 1 Danke

guten tag
nach stundenlangen studium von "dem kofler" und anderen grundlagenwerken weiss ich nicht weiter.

es geht um folgendes:

eine NAS von qnap. drauf ist ein linux (es gibt keine exakte bezeichnund dafür!), shell-aufgaben erledigt die BusyBox [v1.01 (2015.01.25-18:35+0000) multi-call binary]. IRGENDWANN vor einigen jahren hat es meinerseits wohl versuche gegeben, mit robocopy oder anderen (windows)kopierern dateien raufzukopieren. da muss einiges (aber weniges!) schief gegangen sein.

wenn ich heutzutage mit meinen robocopy-scripts rangehe, um von einer NAS auf die backup-NAS zu kopieren, bekomme ich wenige (aber störende!) fehlermeldungen wie:
\\qnap\allegro\_DATA\STN\_intranet_alt\www\scripts\ruckzuck\php_neu\bilder\ Zlter
2015/02/04 08:59:48 FEHLER 123 (0x0000007B) Folgende Datei wird kopiert \\qnap\allegro\_DATA\STN\_intranet_alt\www\scripts\ruckzuck\php_neu\bilder\
Die Syntax f?r den Dateinamen, Verzeichnisnamen oder die Datentr"gerbezeichnungist falsch.

\\qnap\allegro\_DATA\TZM\
\\qnap\allegro\_DATA\TZM\_boehlke\
....

auf den ersten blick übersieht man das leicht. aber in wirklichkeit gibt es auf der quellen-NAS, wenn man mit dem mc raufschaut, eine datei, die hat einen umlaut, der aber als klötzchen angezeigt wird. es ist m.E. hex81, das kann man sehen, wenn man ls > datei macht, und mit dem mc und F3 und hex-modus sich das anschaut.

ist dieser umlaut IN EINEM subdir enthalten, dann rastet robocopy völlig aus, und verweigert jegliche kopiererei im dazugehörigen stammverzeichnis. da gibt es dann plötzlich "leere" verzeichnisse oder so. das bedeutet auf dem backup-NAS datenverlust.

ich habe nun mit windowsmitteln KEINE change, mich den sudirs zu nähern. windows kann sie nicht einlesen. ich muss also auf der linux-ebene weitermachen.
OK!

Frage: wie findet man in linux dateien und oder unterverzeichnisse, die "unmögliche" zeichen haben?
man kann ja damit anfangen, erstmal alle deutschen umlaute abzufragen. oder nur das deutsche "ü" (hex81).
ich denke, das geht, oder müsste gehen mit: find

mein test hat aber nichts gebracht:
sh-3.2# find . -type f -name \*\h81\*
./RSB/_neu_2012_7/hans2000/prg/h816

ok. abwandlungen wie:
sh-3.2# find . -type f -name \*\x81\*
sh-3.2# find . -type f -name ~\*\x81\*~
sh-3.2# find . -type f -name ~*\x81*~
bringen aber nichts!
da, ab dem punkt ist aber eine datei die "ein klötzchen" im namen drin hat.....

was mir klar ist: mit \ muss ich escapen
aber ~ scheint nichts zu bringen.

und: ich hoffe, daß die BusyBox das "original"-find eingebaut hat. und nicht nur einen geringeren umfang uns gibt....

ein weg, der mir übrigbleibt: alle robocopy-logdateien nach "FEHLER 123" per hand zu durchsuchen, und dann weiter in der Nähe des angegebenen ortes suchen. (3 TB warten auf mich, mit riesigen zeichenbäumen..... ;-(

letzte die ?entscheidende? frage:
wie kann man mit find nach einem hex-wert suchen?
\x81 klappt nicht.



danke fürs mitdenken
euer klaus(i)
Mitglied: klausph
04.02.2015 um 14:16 Uhr
mönsch jodel32.
ich habe doch natürlich unter administrator.de gesucht, wie ein weltmeister. den beitrag oben nicht gefunden. es kam mir schon komisch vor (nix zu finden). DANKE!

so: wie ich's mir fast dachte: die busybox spielt nicht mit. ich musste aus dem skript 2x "-depth" entfernen.

danach gelang der aufruf. aber ohne ergebnis.
ich werde mal die sonderzeichen aus der mac-welt da einbauen. mal schauen.
aber dann kommen wir doch noch zu der frage: wie baue ich das hex81 ein?
mal sehen, ob ich die antwort selber finde...

zwischengruß k.l.
Bitte warten ..
Mitglied: klausph
04.02.2015 um 14:46 Uhr
etwas angepasst:
2x "-depth" ist weg!
statt dem _, was er anstelle schreiben soll, will ich ja an die dateien rankommen, also soll erschreiben: "__zzyyxx__" statt des einen buchstabens. das kann ich dann prima mit updatedb und locate suchen.

trotzdem DAS problem:
man scheint mit find nicht sowas definieren zu können: -name "*[\x81]*"
hexwerte suche ich damit also nicht.

dann definieren wir doch anderes!
suche alles, was nicht [A-Z, a-z, 0-9] entspricht. mal schauen


erstmal das minimalst veränderte skript:

#!/bin/bash.
find . -name "*[\<\>/\*\?\|\"\:]*" | while read FILEDIR
do
DIR="${FILEDIR%/*}"
FILE="${FILEDIR/*\/}"
NEWFILE="${FILE//[\<\>\/\*\?\|\"\:]/__zzyyxx__}"
mv "$DIR/$FILE" "$DIR/$NEWFILE"
done
find . -name "*?." -type d | while read DIR
do
NEWDIR="${DIR/%./}"
if ! test -d "$NEWDIR" ;then
mv "$DIR" "$NEWDIR"
fi
done

gruß k.l.
Bitte warten ..
Mitglied: klausph
04.02.2015 um 15:07 Uhr
großes lob an geist des forums: administrator.de!
genau DAS ist es: (hoffentlich) mitdenkende fragesteller wissen nicht weiter, bekommen anregungen (keiner verlangt fertige lösungen
und kommen so zum ziel.

also:
"schaut auf diese stadt", hat kennedy gesagt! (ca 1962...)
also
schaut auf dieses skript: (mit berücksichtigung der BusyBox! argh!)

#!/bin/bash
find . -name "*[!A-Z!a-z!0-9!-!_!.]*" | while read FILEDIR
do
DIR="${FILEDIR%/*}"
FILE="${FILEDIR/*\/}"
NEWFILE="${FILE//[!A-Z!a-z!0-9!-!_!.]/__zzyyxx__}"
mv "$DIR/$FILE" "$DIR/$NEWFILE"
done
find . -name "*?." -type d | while read DIR
do
NEWDIR="${DIR/%./}"
if ! test -d "$NEWDIR" ;then
mv "$DIR" "$NEWDIR"
fi
done

so habe ich mir das gedacht:
er benennt alle dateien um, die keine normalen buchstaben haben (also A-Z und a-z), die auch keine ziffern haben (0-9, und in den dateinamen darf ein _, sowie ein - und natürlich der punkt vorkommen.
mit anderen worten: alles dem o.g. muster NICHT entspricht, bekommt "__zzyyxx__" im dateinamen. das kann man dann im 2. schritt suchen und kontrollieren und dann löschen.
bin sicher, das skript ist noch nicht perfekt. es wird noch zeichen geben, die ich "erlauben" muss.... mal schauen.

gruß k.l.
Bitte warten ..
Mitglied: klausph
04.02.2015, aktualisiert um 19:28 Uhr
am 4.2.2015 nochmal ergänzt. und fertig!

letztenendes benötige ich NUR diese beiden zeilen:

#!/bin/bash
find . -name "*[!A-Z!a-z!0-9!\-!_!.!@!#!=! !\(!\)!~!\$!&!ö!ä!ü!+!,!.!;!\[!\]!Ä!Ü!Ö!'!%!ß!§!{!}!'!\´!\`!é!è!^!:]*"

erklärung:
jedes der zeichen, die für meine fehlersuche NICHT interessant ist, also NICHT angezeigt werden soll, ist mit einem "!" gekennzeichnet.
einige wenige zeichen MÜSSEN nach dem "!" mit einem "\" versehen werden.
z.b. das zeichen ] . MUSS oben so eingetragen werden: !\]

ich lasse dieses miniskript ab einem bestimmten verzeichnis laufen, und sehe sofort, was ist schräg ist, was ist OK.

neugierige fragen:
man kann evtl. noch obiges verbessern!?

sowie man schreibt !A-Z (was ja heisst: alles was nicht großes A bis oder großes Z ist, berücksichtige bitte...)

könnte man nicht schreiben?:
! -/ soll heissen: vom leerzeichen hex20 bis zum /
hex2f. evtl muss hex2f mit \ "escaped" werden

mir wäre viel wohler, wenn ich diese konstruktion mit A-Z so schreiben könnte: 065-090 oder x41-x5a ...
leider keine ahnung... in den docus zu find gibt keine hinweise...

gruß klaus
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
WDS mit PXE Linux (3)

Frage von HansWurstAugust zum Thema Windows Server ...

Hyper-V
gelöst HyperV - VMs weg finde nix mehr (7)

Frage von Nemonautilus zum Thema Hyper-V ...

Linux Tools
Docker - Minimize your containers with alpine linux

Link von Sheogorath zum Thema Linux Tools ...

Monitoring
System Monitoring für Windows, Linux (5)

Frage von manuelw zum Thema Monitoring ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...