Forum: PC Hard- und Software Linux Dateien löschen


von Sepp (Gast)


Lesenswert?

Hallo,

ich habe auf meinem Server verschiedene Ordner und dort sind bestimmte 
Dateien drin. Nun würde ich gerne aus allen Ordner nur die nfo-Dateien 
entfernen lassen.


Beispiel
/mnt/usb/Daten/Ordner1
/mnt/usb/Daten/Ordner2
/mnt/usb/Daten/Ordner3
/mnt/usb/Daten/Ordner4
Und in jedem OrdnerX ist eine Datei mit der Endung nfo drin.
Die anderen Dateien in dem Ordner sollen nicht gelöscht werden.
Auch sollen die OrdnerX alle da bleiben.

Wie kann ich das mit rm machen, damit er mir nur die nfo-Dateien 
löscht

Quasi:
rm /mnt/usb/Daten *.nfo

von sprintf("%s, name) (Gast)


Lesenswert?

Schau mal da nach, da gibt es viele nützliche Einzeiler:
http://www.commandlinefu.com

Stichwort für dein Problem sind find, xargs und rm...

von Hans (Gast)


Lesenswert?

find /mnt/usb/Daten -iname "*.nfo" -delete

macht alles weg.
Wenn zwischen Groß- und Kleinschreibung unterschieden werden soll,
dann -name statt -iname verwenden.

Gruß
Hans

von Sepp (Gast)


Lesenswert?

Da stimmt aber was nicht...
1
[/mnt/usb/Daten] # find /mnt/usb/Daten -iname "*.nfo" -delete
2
BusyBox v1.01 (2014.05.19-18:05+0000) multi-call binary
3
4
Usage: find [PATH...] [EXPRESSION]
5
6
Search for files in a directory hierarchy.  The default PATH is
7
the current directory; default EXPRESSION is '-print'
8
9
EXPRESSION may consist of:
10
        -follow         Dereference symbolic links.
11
        -name PATTERN   File name (leading directories removed) matches PATTERN.
12
        -print          Print (default and assumed).
13
14
        -type X         Filetype matches X (where X is one of: f,d,l,b,c,...)
15
        -perm PERMS     Permissions match any of (+NNN); all of (-NNN);
16
                        or exactly (NNN)
17
        -mtime TIME     Modified time is greater than (+N); less than (-N);
18
                        or exactly (N) days
19
20
[/mnt/usb/Daten] #

von Peter II (Gast)


Lesenswert?

Sepp schrieb:
> Da stimmt aber was nicht...

da ist eine abgespeckte Version von find, die kann das nicht.

von Nils (Gast)


Lesenswert?

Probier mal:

  rm $(find . -iname *.nfo)

von Sepp (Gast)


Lesenswert?

auf einem anderen Rechner geht es...


Jetzt noch eine Frage?
Wenn in dem Ordner versteckte Dateien sind (Beispiel .daten.nfo)

Was muss ich dann eingeben, das er nur die sichtbaren .nfo Dateien 
löscht?

.daten.nfo weg
daten.nfo sollen bleiben

von (prx) A. K. (prx)


Lesenswert?

Sepp schrieb:
> auf einem anderen Rechner geht es...

Das "find" der Busybox ist etwas kastriert.

von (prx) A. K. (prx)


Lesenswert?

Sepp schrieb:
> Was muss ich dann eingeben, das er nur die sichtbaren .nfo Dateien
> löscht?

man find

: Bearbeitet durch User
von Sepp (Gast)


Lesenswert?

Habe hier schon gesucht - aber nix gefunden...

http://www.linux-praxis.de/lpic1/manpages/find.html


1
-sh: man: not found

von (prx) A. K. (prx)


Lesenswert?

Um was genau handelt es sich?

: Bearbeitet durch User
von Sepp (Gast)


Lesenswert?

VU Box

von Sepp (Gast)


Lesenswert?

wenn ich das hier anwende:
1
find -iname "*.nfo" -delete
sind die versteckten Dateien mit weg...

von Rene H. (Gast)


Lesenswert?

find ./ -name "*.nfo" -exec rm -f {} \; -print

Grüsse,
Remé

von Peter II (Gast)


Lesenswert?

Sepp schrieb:
> VU Box

muss aber eine alte Version sein. Die aktuelle kennt die Parameter bei 
find.

von Sepp (Gast)


Lesenswert?

Aktuelle VTI- Version...



1
find ./ -name "*.nfo" -exec rm -f {} \; -print
löscht die versteckte .Datei.nfo mit

von (prx) A. K. (prx)


Lesenswert?

Guckst du eben hier: https://busybox.net/downloads/BusyBox.html

Allerdings in Busybox nicht nur die Funktion kastriert, sondern auch die 
Doku, weshalb die nur Leuten hilft, die das Original kennen. Versuchs 
mit
   find ... -name ".*.ndo" ...

von Tom T. (ramdo)


Lesenswert?

Das hier lässt alle versteckten Dateien am leben:
1
find -iname "*.nfo" -not -path '*/\.*' -delete

von find (Gast)


Lesenswert?

-not -path '*/\.*' hinzufügen um die versteckten Dateien überleben zu 
lassen.

von (prx) A. K. (prx)


Lesenswert?

Tom T. schrieb:
> Das hier lässt alle versteckten Dateien am leben:

Das "find" der Busybox hat vorigem Link zufolge auch kein "-not".

von Tom T. (ramdo)


Lesenswert?

Tom T. schrieb:
> Das hier lässt alle versteckten Dateien am leben:
>
>
1
find -iname "*.nfo" -not -path '*/\.*' -delete

Oder falls -delete nicht geht tut auch
1
find -iname "*.nfo" -not -path '*/\.*' -exec rm {} \;

von Sepp (Gast)


Lesenswert?

1
find -iname ".*.nfo" -delete
löscht nur die versteckten nfo Dateien

von gnu-find (Gast)


Lesenswert?

Gnu findutils installieren.

von Tom T. (ramdo)


Lesenswert?

A. K. schrieb:

> Das "find" der Busybox hat vorigem Link zufolge auch kein "-not".

Ach mist, hätte ich mal RTFM. Danke..

von Rene H. (Gast)


Lesenswert?

Davon war auch nicht die Rede, diese nicht zu löschen. Die Rede war von 
allen *.nfo Dateien.

Grüsse,
René

von (prx) A. K. (prx)


Lesenswert?

Sepp schrieb:
> Was muss ich dann eingeben, das er nur die sichtbaren .nfo Dateien
> löscht?
>
> .daten.nfo weg
> daten.nfo sollen bleiben

Also was jetzt`? Die mit "." vorne sind in Linux üblicherweise die 
unsichtbaren. Sollen nun die weg oder die sichtbaren.

von Sepp (Gast)


Lesenswert?

1
find -iname "*.nfo" -not -path '*/\.*' -delete
2
find -iname "*.nfo" -not -path '*/\.*' -exec rm {} \;
lässt jeweils die Hilfe anzeigen - gelöscht wird nichts

von gnu-find (Gast)


Lesenswert?

Ja, weil sich das alles auf gnu-find bezieht.
http://www.gnu.org/software/findutils/

von (prx) A. K. (prx)


Lesenswert?

Weil es weder -iname noch -not gibt.

von Sepp (Gast)


Lesenswert?

die unsichtbaren .daten.info sollen bleiben

nur die daten.nfo sollen weg

von Sepp (Gast)


Lesenswert?

sorry - hatte ich oben verwechselt



SO MÖCHTE ICH ES HABEN:
die unsichtbaren .daten.info sollen bleiben

nur die daten.nfo sollen weg

von gnu-find (Gast)


Lesenswert?

find /mnt/usb/Daten/*.nfo -delete

von A. H. (ah8)


Lesenswert?

Mein Lösungsansatz:

1. Mit find alle Dateien im Baum listen.
1
find <verzeichnis> -type f

2. Mit grep die heraus filtern, mit denen Du etwas machen möchtest, 
zum Beispiel:
1
find <verzeichnis> -type f | grep '/.daten.nfo$'

Falls das Suchmuster nicht das gewünschte Ergebnis liefert: man regex 
ist Dein Freund. Man kann auch mehrere grep, sed etc. hintereinander 
pipen.

3. Mit awk (es gehen auch andere Utilities, man kann aber auch mit 
awk filtern) aus den so gewonnenen Pfaden die Löschkommandos 
generieren:
1
find <verzeichnis> -type f | grep '/.daten.nfo$' | awk '{print "rm [-f]", $1}'

4. Kontrollieren, ob es dass ist was Du willst!

5. Löschkommandos mit der bash ausführen:
1
find <verzeichnis> -type f | grep '/.daten.nfo$' | awk '{print "rm [-f]", $1}' | bash

Es gibt andere Wege aber dieser ist der wahrscheinlich universellste, 
quasi der RISC-Ansatz. Er kommt mit einer Hand voll Kommandos und mit 
einer Hand voll Optionen aus und lässt sich beliebig ausbauen. So kann 
man zum Beispiel Kommandos erzeugen, mit der Output dann wieder 
Kommandos erzeugt werden und so weiter, begrenzt eigentlich nur durch 
die Länge der Kommandozeile. (Dann muss man die Zwischenergebnisse halt 
in Dateien zwischenspeichern.) Ein großer Vorteil ist auch, dass Du 
siehst, was für Kommandos erzeugt werden, bevor Du sie ausführst.

von Sepp (Gast)


Lesenswert?

bei
1
find /mnt/usb/Daten/*.nfo -delete
findet er keine Daten

und bei:
1
find /mnt/usb/Daten/ *.nfo -delete
ist alles weg - auch der Ordner Daten

von JJ (Gast)


Lesenswert?

Heißt die Datei die weg soll immer Daten.nfo?

Wenn ja:
find /mnt/usb/Daten -name 'daten.nfo' -delete

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

>>> viel geschwurbel um find <<<

Eigentlich beherrschen die Guten[TM] Shells (sh, ksh, bash) das sog. 
Globbing.

Da es offensichtlich hier um BusyBox geht, weiss ich halt nicht ob mein 
folgender Tip da dann auch wirkt.

Also, die Punkdateien mit "Endung"[1] .info behalten, die anderen mit 
dieser Endung löschen:

> Beispiel
> /mnt/usb/Daten/Ordner1
> /mnt/usb/Daten/Ordner2
> /mnt/usb/Daten/Ordner3
> /mnt/usb/Daten/Ordner4
> Und in jedem OrdnerX ist eine Datei mit der Endung nfo drin.

(ls erstmal zur Kontrolle,
rm zum wirklich löschen)
1
ls -1d /mnt/usb/Daten/Ordner[1234]/[^.]*.info
2
rm  -v /mnt/usb/Daten/Ordner[1234]/[^.]*.info

Einfacher, aber nicht so eng gefasst:
1
ls -1d /mnt/usb/Daten/Ordner?/[^.]*info
2
rm -v /mnt/usb/Daten/Ordner?/[^.]*info

noch breiter gefasst, für risikofreudige Schreibfaule:
1
ls -1d /mnt/u*/D*/O*/[^.]*info
2
rm -v /mnt/u*/D*/O*/[^.]*info

Erklärung
Anders als bei DOS, können Richtige[TM] Shells mehrere "Wildcards", 
genauer Globbings pro Pfad korrekt auflösen (inwieweit dies bei 
BusyBox auch gilt, hängt von der Version v. BusyBox und deren 
tatsächlich einkompilierten Optionen ab).
Da gelten also:
- "?" Platzhalter für EIN Zeichen
- "*" Platzhalter für 0, 1 oder mehrere Zeichen
- "[ghRS]" Zeichengruppe, Platzhalter für EINES der Zeichen "g", "h", 
"R" oder "S"
- "[^Fu]" negierte Zeichengruppe, Platzhalter für EIN Zeichen welches 
NICHT "F" und nicht "u" ist.


[1] was ist eine Dateiendung? *nix Dateisysteme kennen nur DATEINAMEN 
(keine Endungen, engl. Extensions). Dateinamen ist eine Zeichenkette 
(engl. String) in der kaum ein Zeichen veboten ist. So auch nicht der 
Punkt ".", er darf sooft man will oder auch gar nicht im Dateinamen 
vorkommen.
Klar hat man Handhabungsprobleme mit einer Datei welche z.B. "^J^G^H^M 
}:-)" heisst, das Dateisystem kann sie aber aufnehmen und wiedergeben.

von Sepp (Gast)


Lesenswert?

JJ schrieb:
> Heißt die Datei die weg soll immer Daten.nfo?
>
> Wenn ja:
> find /mnt/usb/Daten -name 'daten.nfo' -delete

Nein

von Sepp (Gast)


Lesenswert?

Hier nochmal zur Übersicht...(Ist ein Beispiel)

1
root@vusolose:~# find /mnt/hdd/Daten/ -iname "*.nfo"
2
/mnt/hdd/Daten/Ordner3/.test.nfo
3
/mnt/hdd/Daten/Ordner3/test.nfo
4
/mnt/hdd/Daten/Ordner2/.test.nfo
5
/mnt/hdd/Daten/Ordner2/test.nfo
6
/mnt/hdd/Daten/Ordner1/.test.nfo
7
/mnt/hdd/Daten/Ordner1/test.nfo
8
root@vusolose:~#


Die sichtbaren Dateien sollen weg und die mit dem Punkt vorne(also 
versteckte) sollen bleiben

von gnu-find (Gast)


Lesenswert?

installier dir halt die gnu-findutils. dann hastn etwas (viel) 
mächtigeres find

von gnu-find (Gast)


Lesenswert?

oder machn nfs mount und machs von nem rechner mit gnu-find aus

von Konrad S. (maybee)


Lesenswert?

1
/mnt/hdd/Daten/Ordner?/*.nfo

von Sepp (Gast)


Lesenswert?

Die Ordner heissen alle anders. Das Ordner habe ich nur als Beispiel 
genommen.

Es müssen also alle Ordner im Ordner Daten durchsucht werden.

von Konrad S. (maybee)


Lesenswert?

1
/mnt/hdd/Daten/*/*.nfo

von ?!? (Gast)


Lesenswert?

Konrad S. schrieb:
> /mnt/hdd/Daten/*/*.nfo

Wie funktioniert hier die Unterscheidung zwischen versteckten und nicht 
versteckten Files? Also den führenden Punkt meine ich...
Wenn ich das richtig sehe, werden hier ALLE Files, die auf '.nfo' enden, 
gefunden, also auch die versteckten. Oder?

von Konrad S. (maybee)


Lesenswert?

?!? schrieb:
> Wie funktioniert hier die Unterscheidung zwischen versteckten und nicht
> versteckten Files? Also den führenden Punkt meine ich...

Bei Unix ist es üblich, dass bei der Dateinamensexpansion der Shells der 
Stern als Wildcard den Punkt in Erstposition eines Dateinamens nicht 
abdeckt.

Probier einfach mal
1
ls /mnt/hdd/Daten/*/*.nfo
dann siehst du, was erwischt wird.

von ?!? (Gast)


Lesenswert?

Konrad S. schrieb:
> Bei Unix ist es üblich, dass bei der Dateinamensexpansion der Shells der
> Stern als Wildcard den Punkt in Erstposition eines Dateinamens nicht
> abdeckt.

Das hab ich nicht gewusst. Danke für die Auskunft :-)

von Sepp (Gast)


Lesenswert?

Konrad S. schrieb:
> ls /mnt/hdd/Daten/*/*.nfo


Das wars - klappt einwandfrei

von K. J. (Gast)


Lesenswert?

find /bla/blub -iname "*.nfo" -not -iname ".*"

Würde auch gehen

von Peter II (Gast)


Lesenswert?

K. J. schrieb:
> Würde auch gehen

 ja, wenn das find den Parameter exec kennen würde - das ist eine 
busybox Version die das aber nicht kann.

von K. J. (Gast)


Lesenswert?

hm irgentwas ist ebend bei edit verschwunden

find /home/theborg -iname "*.nfo" -exec find {} \; -not \( -iname ".*" 
\)

war es aber ok leuft wohl nicht

von strolch (Gast)


Lesenswert?

Auch mal Senf dazu abgeben...
1
# finde alle .*.nfo Dateien
2
find /mnt/hdd/Daten/ -iname '.*.nfo'
3
# finde alle *.nfo, die NICHT mit . beginnen
4
find /mnt/hdd/Daten/ -iname '[^.]*.nfo'

Den Rest kann man sich einfach mit
1
rm $(find ....)
(auch auf einer kastrierten Busybox) zusammenbauen.
Wichtig hierbei: mit ' quoten, damit die Shell nicht dazwischen funkt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.