Da Du offenbar eine Liste von Dateien verarbeiten willst, würde ich als erstes in Richtung find ... -exec ... denken
Code:
# Suche alle Dateien in /home/ich (und dessen Unterverzeichnissen),
# die als Benutzer 'ich' haben und in deren Namen 'blah' vorkommt
find /home/ich -user 'ich' -iname '*blah*'
# tue etwas mit den gefundenen Dateien, z. B. verschiebe sie nach /somedir
find /home/ich -user 'ich' -iname '*blah*' -exec mv {} /somedir \;
Du kannst also als Wert für die Option -exec einen beliebigen Befehl übergeben, in den anstelle von {} die jeweils gefundene Datei eingesetzt wird. Abgeschlossen wird der Befehl mit \; . find beherrscht noch einen ganzen Schwung weitere Tests, z. B. ob es sich um eine normale Datei (oder ein Verzeichnis oder eine Gerätedatei oder ...) handelt, wann eine Datei zum letzten Mal geändert wurde usw. Die man page von find oder das allwissende Google wissen genaueres
Speziell wenn Du mit sehr vielen Fundstellen rechnest, kann xargs die bessere Möglichkeit sein. Mit xargs stellst Du Kommandozeilen mit mehreren bis vielen Argumenten zusammen. Wenn Du also beispielsweise mitdie Textdateien t1.txt, t2.txt und t3.txt anzeigen lassen kannst, entspricht
Code:
ls *.txt | xargs mv {} /somedir
einem Aufruf von
Code:
mv t1.txt t2.txt t3.txt /somedir
Bei sehr vielen Argumenten kann xargs deshalb besser sein als find -exec, weil letzteres für jede Datei einen eigenen Prozess startet. Das heißt, in obigem Beispiel würde find -exec die drei gefundenen Textdateien mit drei getrennten mv-Befehlen verschieben. Wenn Du nicht nur drei, sondern vielleicht drei Millionen Dateien behandeln willst, könnte das den Rechner ins Schwitzen bringen xargs macht einen einzigen Befehl daraus. Dessen Länge ist natürlich auch irgendwo begrenzt, und nicht jeder Befehl kann mit beliebig vielen Argumenten umgehen. Außerdem trennt xargs seine Argumente mit Leerzeichen. Das bedeutet, wenn Du beispielsweise den Dateinamen "meine datei.txt" an xargs verfütterst, gerät er ins Stolpern, weil er das als zwei Dateien "meine" und "datei.txt" interpretiert. Es gibt Wege, das zu umgehen, aber das würde hier zu weit führen.
Der Vollständigkeit halber sei noch sed erwähnt, auch wenn es in Deinem Fall nicht der beste Ansatz sein dürfte. sed ist ein "streaming editor", mit dem Du Dateien zeilenweise verarbeiten kannst. Beispielsweise kannst Du damit Zeilen herausfiltern, die ein bestimmtes Muster aufweisen, oder Ersetzungen vornehmen, oder ... Die Arbeit mit sed ist nicht in drei Sätzen erklärt, aber auch hier findet Google im Zweifel genügend Tutorials und andere Infoquellen
Bis dann,
scribble
Lesezeichen