staging.inyokaproject.org

Mit welchem Tool kann ich den Inhalt vieler Dateien auf einmal ändern?

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

Linuxisttoll

Anmeldungsdatum:
12. April 2021

Beiträge: Zähle...

hallo

ich habe ca. 90 Playlists in 90 verschiedenen Dateien gespeichert. Darin sind natürlich Dateinamen und Dateipfade genannt. Jetzt möchte ich aber die Playlists auch auf einem anderen Computer verwenden, aber da heisst die Platte anders und ich möchte der anderen externen Platte dieses anderen PCs nicht den selben Namen geben wie der externen Platte des anderen Computers, wo die Playlists ursprünglich her kommen. Denn jeweils auf allen PCS liegt meine ganze Musik auf externen Festplatten.

Somit muss ich damit die Playlists funktionieren in jeder einzelnen Datei der 90 Dateien den Pfad bzw. den Festpplattennamen im Klartext ändern.

Da ich aber nicht 90 Dateien öffnen, ändern und wieder speichern möchte, hätte ich gerne ein Tool, das mir eine Textkette/Zeichenkette gleichzeitig in 90 verschiedenen Dateien ändern kann.

Was kann man dafür nehmen ?

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Gemäß deiner spartanischen Information kann man auch nur in der gleiche Tiefe antworten:

Nimm sed und/oder awk.

Wenn du etwas mehr Hilfestellung brauchst, müsstest du auch etwas mehr Informationen geben. Eine Möglichkeit wäre eine kurze (2-3 Titel) Playlist in einem Codeblock posten und in einem weiteren Codeblock eintragen, wie du sie haben willst. Auch wäre ein Hinweis hilfreich, welche Betriebssysteme die Ziel-PC's haben (Win/Linux/Mac). Eventuell musst du die Playlists auch nicht ändern sondern kommst über Symbolic Links auch ans Ziel.

Mir ist auch unklar, wo die abzuspielenden Daten liegen (NAS, mehrere geclonte USB Disk oder eine USB Disk, die du von PC zu PC wandern lässt).

Linuxisttoll

(Themenstarter)

Anmeldungsdatum:
12. April 2021

Beiträge: Zähle...

ich muss einfach die Zeichenkette zB

/media/userDagobert/Festplattenname1/

ersetzen durch

/meda/userPaulchenPanther/Festplattenname2/

In jeder Playlist ist eine solche Zeile 5-100x vorhanden. Dh in jeder der zB 100 Zeilen (innerhalb einer Playlist-Datei) steht "/meda/userPaulchenPanther/Festplattenname2/" und verweist weiter hinten auf eine andere MP3 Datei, die aber nicht geändert werden muss, sondern nur der Username und der Festplattenname, in jeder Zeile.

ich habs versucht mit

sed s/Anton/Berta/g Textdatei Also gemäss meiner obigen Vorgaben: sed s/userDagobert/userPaulchenPanther/g Textdatei

Und dann wird auch in der Konsole der Inhalt der Dateien geändert dargestellt, aber SED schreibt/speichert die Änderungen nicht in die Dateien selbst, sondern stellt sie wie gesagt nur als Folge des Befehls (geändert) in der Konsole visuell dar...

Wie bekomme ich SED dazu, diese Änderungen in die Dateien selbst zu speichern ?

Zur Veranschaulichung:

Inhalt Datei 1: 
/media/userDagobert/Festplattenname1/....mozartstück1.mp3
/media/userDagobert/Festplattenname1/....mozartstück2.mp3
/media/userDagobert/Festplattenname1/....mozartstück3.mp3
/media/userDagobert/Festplattenname1/....mozartstück4.mp3
/media/userDagobert/Festplattenname1/....mozartstück5.mp3
/media/userDagobert/Festplattenname1/....mozartstück6.mp3
/media/userDagobert/Festplattenname1/....mozartstück7.mp3


Der Inhalt der Datei 1 soll wie folg abgeändert werden: 

/media/userPaulchenPanther/Festplattenname2/....mozartstück1.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück2.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück3.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück4.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück5.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück6.mp3
/media/userPaulchenPanther/Festplattenname2/....mozartstück7.mp3

Und ich habe eben nicht nur eine Datei/eine Playlist von Mozart, sondern von 99 verschiedenen Kompponisten! Also für 99 Komponisten 99 verschiedene Dateien/Playlists.

Und eben in allen 99 Playlists soll jeweils der Username und der Plattenname auf einmal in einem Arbeitsgang geändert werden von /userDagobert/Festplattenname1 in /user/PaulchenPanther/Festplattenname2..

☺

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3793

Wie bekomme ich SED dazu, diese Änderungen in die Dateien selbst zu speichern ?

sed --help
...
-i[SUFFIX], --in-place[=SUFFIX]
              edit files in place (makes backup if SUFFIX supplied)

Seebär

Avatar von Seebär

Anmeldungsdatum:
2. Mai 2009

Beiträge: 833

sed und nicht SED (igitt)

Inplace-Option -i nutzen

Iteration über Files via find

Rest: Manuals lesen / Suchmaschinen nutzen. Gerne dann Lösung posten

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Ok, wenn du einfach per sed ändern willst, wäre der Weg etwas wie folgt skizziert:

$ # Die Playlisten liegen unterhalb des Verzeichnisses z.B. ~/x und sind vom Type .playlist
$ find ~/x -name "*.playlist" | while read f; do sed -i 's#/oldDir/#/newDir/#' "$f"; done

Ich habe jetzt das while Konstrukt verwendet. Das ist nicht so stabil wie ein "-exec" beim "find", doch aus meiner Sicht für dich ev. leichter verständlich. Beim "sed" habe ich "-i" verwendet, wodurch die Datei direkt geändert wird. Wenn du die alten Dateien behalten willst, solltest du sie vorher sichern oder verwende das "-i[SUFFIX]" Konstrukt.

Willst du mehrere Änderungen in einer Zeile machen, kannst du dies beim "sed" Befehl über ";" verketten. Bitte achte aber darauf, dass du nicht auch einen Dateinamen änderst, der wie ein Verzeichnis ausschaut (daher kein global substitute). Als Trennzeichen habe ich das "#" verwendet, das das "/" Zeichen beim Directory auftaucht. Wenn die Playlists nicht unter einem Verzeichnis sind sondern sehr verstreut liegen, kannst du eine Datei mit den Verzeichnissen/Playlistdateien per "cat" in die "while" Schleife pipen.

Linuxisttoll

(Themenstarter)

Anmeldungsdatum:
12. April 2021

Beiträge: Zähle...

danke Euch allen für die Hilfe! ☺

habs hinbekommen durch den einfachen Befehl:

sed s/Ursprungstext/GeänderterText/g *.txt -i

Es war nur der Parameter -i am Ende, der bewirkt, dass er die Änderungen nicht nur in der Konsole anzeigt, sondern sie gleich in die entsprechende Datei schreibt. Und in dem ich am Ende keinen spezifischen Dateinamen schrieb, sondern *.txt, hat er die Änderungen bei allen 90 Dateien/Playlists automatisch vorgenommen. ☺

Und hab die Playlists schon auf dem anderen Rechner probiert. Sie funktionieren wie vorgesehen..

Danke

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Hi! Falls das Thema damit erledigt ist, markiere es bitte noch als gelöst.

Antworten |