Script zum Löschen von bestimmten Dateien
Hallo zusammen !
es geht um folgenden sachverhalt: wir haben hier ein linux system auf dem bestimmte dateien verschoben werden sollen.... diese dateien liegen mir anhand einer liste vor.
(pro zeile ein dateiname)
da das verzeichnis gefühlte 1000 unterordner hat (also rekursiv müsste die suche auf jedenfall sein) und das ca. 700 dateien sind, die verschoben werden müssten kann sich ja sicherlich jeder
vorstellen wie lange das dauern würde.
meine frage ist deshalb ob es irgendein script oder befehl gibt, das diese dateinamen aus der mir vorliegenden datei zeile für zeile überprüft, sucht und dann an einen
bestimmten platz verschiebt ?
mit linux ist doch so gut wie alles möglich
mit freundlichen grüßen
skip123
es geht um folgenden sachverhalt: wir haben hier ein linux system auf dem bestimmte dateien verschoben werden sollen.... diese dateien liegen mir anhand einer liste vor.
(pro zeile ein dateiname)
da das verzeichnis gefühlte 1000 unterordner hat (also rekursiv müsste die suche auf jedenfall sein) und das ca. 700 dateien sind, die verschoben werden müssten kann sich ja sicherlich jeder
vorstellen wie lange das dauern würde.
meine frage ist deshalb ob es irgendein script oder befehl gibt, das diese dateinamen aus der mir vorliegenden datei zeile für zeile überprüft, sucht und dann an einen
bestimmten platz verschiebt ?
mit linux ist doch so gut wie alles möglich
mit freundlichen grüßen
skip123
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97012
Url: https://administrator.de/forum/script-zum-loeschen-von-bestimmten-dateien-97012.html
Ausgedruckt am: 23.12.2024 um 19:12 Uhr
10 Kommentare
Neuester Kommentar
Das ist mit jeder beliebigen Skript-Sprache möglich. In Perl z.B.
#!/usr/bin/perl
my $filename = "thisfile.txt"; # unsere datei mit der liste
# datei zum lesen oeffnen
open(HANDLE, "< $filename") or die "Couldn't open file '$filename' for reading!\n";
# datei zeilenweise einlesen
while($line = <HANDLE>) {
# tu etwas mit dieser Zeile, z.B. die Datei verschieben
chomp($line); # zeilenumbruch entfernen
$out = `mv $line /mein/neuer/platz`;
# ggf Output ausgeben
if($out) {
print $out."\n";
}
}
# datei schliessen
close(HANDLE);
Du musst den Befehl schon als Perl-Code einbinden. D.h. dass z.B. Anführungsstriche escaped werden müssen und dass der gesamte Befehl beim Ausführen in Backticks eingeschlossen werden muss. Beispiel:
Im Skript könnte das also z.B. so aussehen:
$command = "befehl --mit \"parametern\""; $out = `$command`;
Im Skript könnte das also z.B. so aussehen:
#!/usr/bin/perl
my $filename = "test.txt"; # unsere datei mit der liste
# datei zum lesen oeffnen
open(HANDLE, "< $filename") or die "Couldn't open file '$filename' for reading!\n";
# datei zeilenweise einlesen
while($line = <HANDLE>) {
# tu etwas mit dieser Zeile, z.B. die Datei verschieben
chomp($line); # zeilenumbruch entfernen
$command = "find /test -name \"$line\" -exec mv {} /tempo";
$out = `$command`;
# ggf Output ausgeben
if($out) {
print $out."\n";
}
}
# datei schliessen
close(HANDLE);
Auch Backslashes kann man als Escape-Sequenz einfügen. Will man also ein einzelnes Backslash im String haben, schreibt man einfach '\\'. Ob der Dateiname in Anführungsstrichen steht, dürfte find eigentlich egal sein. Da du sie in deinem find-Befehl drin hast, hab ich sie auch einfach mal mit reingenommen. Der Befehl
Muss als Perl-String also so aussehen:
Im Übrigen sind Nachfragen kein Problem. Dafür sind wir ja hier. Also nicht gleich aufgeben.
find /test -name "test1" -exec mv {} /tempo \;
Muss als Perl-String also so aussehen:
"find /test -name \"test1\" -exec mv {} /tempo \\;"
Im Übrigen sind Nachfragen kein Problem. Dafür sind wir ja hier. Also nicht gleich aufgeben.