Like Tree1Danke
  • 1 Beitrag von Bratkartoffel
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1253
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Avatar von erik s.
    erik s. ist offline Mitglied Platin
    Registriert seit
    Mar 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    574
    Servus und guten Morgen,

    ich habe ein wahrscheinlich nicht seltenes Anliegen, zu dem ich allerdings bisher nicht die Lösung gefunden habe, die ich erwartete.
    In einem Webseiten-Archiv befinden sich rund 3'700 html-Dateien, welche eine Passage in sich führen, die ich gern loswerden möchte. Es handelt sich dabei lediglich um ein paar Wörter, die immer identisch sind (beispielsweise "REPLACE ME").
    Ich ging bisher davon aus, dass sich das Ganze mittels eines Einzeilers lösen lässt. Jedoch schlugen alle Versuche fehl :-/
    Mein erster Versuch, die Dateien "in place" zu bearbeiten
    Code :
    1
    
    find . -iname "*.html" -exec sed -i 's/REPLACE ME/ /g' {} \;
    gab folgende Fehlermeldung zurück:
    Code :
    1
    
    sed: preserving permissions for `./sedkp4L98': Die Operation ist nicht erlaubt
    Das ist nur die Meldung der ersten gefundenen Datei. Die folgenden sehen ähnlich aus. Ich verstehe auch nicht, wo die Bezeichnung "sedkp4L98" als Dateiname herkommt. Zugriffsrechte sind alle okay, das Ganze spielt sich auf meinem lokalen Rechner in einem gemounteten Verzeichnis ab.

    Dann habe ich versucht, die veränderten Inhalte nicht mehr "in place", sondern in eine neue Datei nach dem Muster "<Original-Dateiname>.edited" zu speichern.
    Code :
    1
    
    find . -iname "*.html" -exec sed 's/REPLACE ME/ /g' {} \> {}.edited \;
    und
    Code :
    1
    
    find . -iname "*.html" -exec sed 's/REPLACE ME/ /gpw {}.edited' {} \;
    geben mir jeweils nur den Inhalt auf der Konsole aus, erstellen die Dateien und lassen sie aber leer.
    Wenn ich den Backslash vor dem Ausgabe-Oprator ">" im oberen Befehl weglasse, schreibt er alle Inhalte in die selbe Datei, nämlich in "{}.edited". Demnach scheint der find-Befehl die Ausgabeumleitung nicht mehr zum exec-Parameter dazuzuzählen.

    Gibt es eine Lösung, ohne ein Skript schreiben zu müssen? Das wäre nun nicht schlimm, dafür habe ich auch mehr als genug Beispiele gefunden. Mein Ehrgeiz hat mich nur dazu verleitet, das Problem so anzugehen

    Vielen Dank schon mal.

    Gruß
    Erik
     

  2. #2
    Avatar von Bratkartoffel
    Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.760
    Hi,

    sed: preserving permissions for `./sedkp4L98': Die Operation ist nicht erlaubt.
    Zuerst mal zu dem komsichen Dateinamen sedkp4L98.
    Dies ist eine temporäre Datei, die vom sed angelegt wird. Das richtige "in-place" bearbeiten von Dateien geht meiner Meinung / meines Wissens nicht. Also liest er die Datei ein, bearbeitet sie im RAM und schreibt sie dann in eine solche Temp-Datei. Abschließend wird die Original-Datei gelöscht, und die temporäre Datei umbenannt.

    Die Fehlermeldung sieht für mich nach folgendem Fall aus:
    Du (UserID 1000) versuchst Dateien zu bearbeiten, die dem User 1001 gehören. Der sed erstellt die teporäre Datei und versucht diese per chown dem User 1001 zu geben. Das darf aber ein normaler User nicht, von daher wirft er diese Fehlermeldung.

    2 Vorschläge:
    - Du machst ein "sudo chown -R ." auf das Verzeichnis und legst dich als Besitzer fest
    - Du führst den find-Befehl per sudo mit erhöhten Rechten aus

    Persönlich würde ich eher zu zweiter Methode greifen. Wenn du allerdings verschiedene Besitzer da drin hast und dies so beabsichtigt ist, dann würde ich doch eher zu dem zweiten Befehl greifen, da hier die Besitzer nicht verändert werden.

    Grüße,
    BK
    erik s. bedankt sich. 
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"


    Meine Projekte sind OpenSource auf Github

  3. #3
    Avatar von erik s.
    erik s. ist offline Mitglied Platin
    Registriert seit
    Mar 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    574
    Den Befehl mit sudo auszuführen wäre natürlich eine Möglichkeit gewesen, auf die ich auch selbst hätte kommen können
    Funktioniert nun. Im Prinzip geht es also "nur" um die "Enteignung" bzw. "Umeignung" nach dem Umbenennen der temporären Datei, ja? Ich dachte immer, Dateien, die mir (als User) gehören und auf die ich schreibenden Zugriff habe, kann ich auch einen neuen Besitzer zuordnen. Quasi als Geschenk Im echten Leben funktioniert das ja (meistens) auch, hehe.

    Danke nochmal für die schnelle Hilfe.

    Grüße
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 19.03.12, 09:47
  2. Größe mehrerer per find gefundener Dateien addieren
    Von NeMeSiS1987 im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 19.10.09, 01:42
  3. Bash: Strings in Dateien mit Regex umschreiben
    Von Radhad im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 24.06.08, 16:06
  4. bash: Zeilen von Dateien zählen
    Von DarthShader im Forum Linux & Unix
    Antworten: 5
    Letzter Beitrag: 28.04.07, 03:09
  5. Dateien downloaden in der bash
    Von dila71 im Forum Linux & Unix
    Antworten: 5
    Letzter Beitrag: 29.12.05, 12:33