Archiv verlassen und diese Seite im Standarddesign anzeigen : bash-script
Ich versuche seit Tagen, ein kleines bash-script zu schreiben, was folgendes tut:
Es durchsucht alle Textdateien in einem definierten Verzeichnis nach einem Suchstring. Ist der String enthalten, wird die Datei sofort gelöscht, ist der String nicht enthalten, bleibt sie unverändert.
Ich weiß, daß ich das irgendwie mit if / fi, find, grep und rm machen muß - aber es sind definitiv zuviele Fragen, als daß ich das alleine hinbekomme.... leider muß es bash sein, in php könnte ich das selbst ;)
Es wäre nett, wenn ein bash-Spezi mir helfen könnte - und für die Zukunft eine weitere Frage:
Gibt es sowas wie "selfhtml" oder "selfphp" auch für die bash? Auf Dauer möchte ich das selbst können!!!!
Mit freundlichem Gruß
df8oe
mike el angelo
17-07-2007, 11:14
Wie wär's damit?
for ${DATEI} in ${VERZ}/* do
if grep "${SUCHMUSTER}" "${DATEI}"; then
rm -f "${DATEI}"
fi
done
Falls Du bestimmte Dateien suchen möchtest müsstest Du die mit z.B. ${VERZ}/*.txt filtern, aber das wirst Du schon hinbekommen...
Und zum lernen... Vielleicht hilft Dir ja der Link:
http://tldp.org/LDP/abs/html/index.html
Zu "selfbash": Bei mir auf der HP hats dazu einige tolle Links - einfach mal vorbeischauen ;) (Tutorials -> linux,scripte)
MfG Bischi
Ich versuche seit Tagen, ein kleines bash-script zu schreiben, was folgendes tut:
Es durchsucht alle Textdateien in einem definierten Verzeichnis nach einem Suchstring. Ist der String enthalten, wird die Datei sofort gelöscht, ist der String nicht enthalten, bleibt sie unverändert.
...
find $DIR -type f -printf "grep -q '$Pattern' \"%p\" && rm \"%p\"\n" | shDamit durchsuchst Du rekursiv ab $DIR alle Dateien nach dem Muster $Pattern und löschst sie bei Auftreten des Suchmusters. Du kannst die Suchtiefe über die Option -maxdepth begrenzen.
Jan
Es funktioniert nun - allerdings nur lokal. Mit curlftpfs bekomme ich ein oder zwei Ergebnisse, dann hängt das Ganze. Es ist vermutlich ein curlftpfs-Problem, ich möchte das Problem anders lösen. Ich möchte nun alle Dateien, die betroffen sind, auf meinen Rechner kopieren und dort suchen. Die Struktur auf dem Server ist wie folgt:
/Name1/Bezeichnung2/bios.zip
...davon viele, teils in 2, teils in 3 Ordner verschachtelt. Die Struktur habe ich mit find in eine Textdatei bringn können, jetzt möchte ich, daß alle Dateien, die sich unterhalb eines jeden Verzeichnisses befinden, auf meinen lokalen Rechner bringe. Ergebnis sollte also sein:
/home/meiner/ftp/Name1/Bezeichnung2/bios.zip
Wie kann ich das mit cp erledigen? mit cp -R erreiche ich, daß alle Dateien kopiert werden. Und wie erreiche ich, daß die Ordnerstruktur erhalten bleibt??
Mann, was muß ich noch alles lernen :/
df8oe
...Die Struktur habe ich mit find in eine Textdatei bringn können, jetzt möchte ich, daß alle Dateien, die sich unterhalb eines jeden Verzeichnisses befinden, auf meinen lokalen Rechner bringe. Ergebnis sollte also sein:
/home/meiner/ftp/Name1/Bezeichnung2/bios.zip
Wie kann ich das mit cp erledigen? mit cp -R erreiche ich, daß alle Dateien kopiert werden. Und wie erreiche ich, daß die Ordnerstruktur erhalten bleibt??...
Mit "cp -r" oder "cp -R" ;-) Wenn Du die gesamte Struktur kopieren willst, dann brauchst Du Dir vorher keine Textdatei zu bauen und diese dann zeilenweise einzeln kopieren. Du machst einfach:
cp -r /basis/der/quelle /basis/des/ziels dann hast Du unterhalb von "/basis/des/ziels" die gesamte Struktur. Die Option "-r" heisst ja nicht umsonst "recursively".
Wenn Du nur ausgewählte Dateien aus dem Baum kopieren willst (was aus Performance-Gründen zweckmäßig sein kann), dann kannst Du mal den find in Zusammenarbeit mit cpio probieren:
find /quelle/der/basis -type f -name 'Muster' -print | cpio -pdmu /quelle/des/zielsJan
Nicht ganz......
Mache ich es so mit cp -r, dann stimmt die Ordnerstruktur, die NACH /basis/der/quelle kommt. Also wird aus /basis/der/quelle/ordner/unterordner/datei.txt /basis/de/ziels/ordner/unterordner/datei.txt
Ich brauche aber als Ergebnis /basis/des/ziels/basis/der/quelle/ordner/unterordner/datei.txt
...???...
Ich habe eine Textdatei mit etwa 100 Zeilen, in der jeweils /basis/der/quelle in einer Zeile steht (natürlich immer unterschiedliche Pfade!!). Wenn ich nun mit einem Texteditor an den Anfang jeder Zeile "cp -r " kopieren lasse, werden nur die Strukturen NACH der Angabe kopiert. Ich möchte vermeiden, alles jeweils nochmal manuell abzutippen und davor /basis/des/ziels zu setzen...
df8oe
Nicht ganz......
Mache ich es so mit cp -r, dann stimmt die Ordnerstruktur, die NACH /basis/der/quelle kommt. Also wird aus /basis/der/quelle/ordner/unterordner/datei.txt /basis/de/ziels/ordner/unterordner/datei.txt
Ich brauche aber als Ergebnis /basis/des/ziels/basis/der/quelle/ordner/unterordner/datei.txt
...
Dann nimm die Variante mit find und cpio:
find /basis/der/quelle -print | cpio -pdmu /basis/des/zielsDamit wirft find die absoluten Pfade aus und die werden durch cpio komplett unterhalb von /basis/des/ziels aufgebaut. Alternativ kannst Du auch mit Deiner Textdatei arbeiten (aber wenn Du die auch per find aufbaust, ist das doppelte Arbeit):
cat datei | cpio -pdmu /basis/des/ziels
# oder
cpio -pdmu /basis/des/ziels <dateiDas Schöne am cpio ist ja, dass er jegliche Pfade per stdin schluckt.
Jan
Kommando zurück - mittels cpio habe ich es hinbekommen!
D*A*n*k*e
df8oe
Kommando zurück - mittels cpio habe ich es hinbekommen!
Zu Ehrenrettung von cp: Damit gehts natürlich auch, wenn auch mit Zwischenschritt:
mkdir -p /basis/des/ziels/`dirname /basis/der/quelle` && cp -pr /basis/der/quelle /basis/des/ziels/`dirname /basis/der/quelle`Jan
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.