Ich habe einen PHP-Code, der den Dateinamen generiert, an den wget seine Protokolle anfügt. Ich habe mehr als 2000 Dateien generiert, aber das Problem ist, dass ich Probleme habe, mit ihnen zu arbeiten, weil ich einen Fehler beim Einfügen PHP_EOL
als Teil des Namens hatte. Dieser Code wird LF/line feed/%0A
unter seinem Namen hinzugefügt
Beispiel für einen solchen Dateinamen (beim Zugriff über den Browser, wenn er auf / var / www / html gesetzt ist) http://xxxx/wget_01_a%0a.txt
Beachten Sie den %0a
Namen vor der Erweiterung
Ich habe es vermasselt, und ich wünschte, es gibt einen Umbenennungsstapel, der alle Dateien durchsucht, und wenn er gefunden line feed
würde, würde er ihn ohne Zeilenvorschub umbenennen, so dass es einfach so wärehttp://xxxx/wget_01_a.txt
Ich bin mir nicht ganz sicher, wie ich damit umgehen soll, denn wenn ich ls
auf Kitt alle Sonderzeichen mache, die nicht auf dieses unerwünschte Zeichen beschränkt sind, ?
möchte ich nur auf diesen Zeilenvorschub abzielen.
\n
? Können Sie so etwas wie Echo machen,*.txt | od -c
damit wir sehen, welches nicht druckbare Zeichen tatsächlich vorhanden ist?\n
pastebin.com/wXCDCJjr*.txt
(was erklären würde, warumrename
sie nicht aufgenommen wird). Wenn Sie die beiden Muster zu, sagen wir,txt
statt$'\n'
und''
, haben Sie keine Ausgabe erhalten? Druckt echo $ '\ n' tatsächlich zwei Zeilenumbrüche?rename $'\r' '' wget_*
damit es funktionierteAufbauend auf dem, was bereits beantwortet wurde, habe ich es verallgemeinert, um alle Dateien mit Zeilenvorschub im aktuellen Ordner und Unterordner umzubenennen, indem ich den Befehl find mit dem Umbenennen kombiniere -
Hier findet der Befehl find alle Dateien, die Zeilenvorschub enthalten, und der Befehl zum Umbenennen ersetzt jeden Zeilenvorschub im Namen durch ein Leerzeichen.
Das Gleiche kann für alle anderen problematischen Zeichen wie Wagenrücklauf (\ r) durchgeführt werden.
quelle