Alle Dateien löschen, aber nicht die Verzeichnisse

H

hansi1279

Grünschnabel
Hallo,

könnt Ihr mir helfen, wie ich alle Dateien, auch Systemdateien (.profile, usw) auf einen Schlag löschen kann. Dabei darf die Verzeichnisstruktur nicht geändert werden.
Es ist für mich umständlich alle Files einzel zu löschen. Ich wäre dankbar für ein Beispiel.

Danke im voraus

hansi
 
Code:
find ./ !-type d -exec rm {} \;
loescht alle nicht-Verzeichniss.
 
Code:
find /path -type f  |xargs rm -f

Falls es zu viele Dateien sind.
@rikola man kann auch positiv finden gelle. ;)

Gruß Wolfgang
 
Code:
find /path -type f  |xargs rm -f
@rikola man kann auch positiv finden gelle. ;)

Ich behaupte mal (-type f) != (!-type d).
Es gibt außer Files und Directories noch andere Typen, die find suchen oder ignorieren kann. Um exakt zu sein gibt es bei find noch fünf andere Typen:
Code:
b      gepufferte Gerätedatei für ein blockorientiertes Gerät
c      ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
d      Verzeichnis
p      benannte Pipeline (FiFo)
f      normale Datei
l      symbolischer Link
s      Socket
 
Ich behaupte mal (-type f) != (!-type d).
Es gibt außer Files und Directories noch andere Typen, die find suchen oder ignorieren kann. Um exakt zu sein gibt es bei find noch fünf andere Typen:
Code:
b      gepufferte Gerätedatei für ein blockorientiertes Gerät
c      ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
d      Verzeichnis
p      benannte Pipeline (FiFo)
f      normale Datei
l      symbolischer Link
s      Socket

Und was willst du uns jetzt damit sagen?
-type f ist kein Socked, kein symbolischer Link, keine benannte Pipeline (FiFo), kein Verzeichnis, kein ungepufferte Gerätedatei für ein zeichenorientiertes Gerät.

:think:
Also, Selektion erfolgreich.

Gruß Wolfgang
 
Hi

Vielen Dank. Werde am Montag alles ausprobieren.
 
Und was willst du uns jetzt damit sagen?
-type f ist kein Socked, kein symbolischer Link, keine benannte Pipeline (FiFo), kein Verzeichnis, kein ungepufferte Gerätedatei für ein zeichenorientiertes Gerät.
Gut erkannt! Glückwunsch. :))
:think:
Also, Selektion erfolgreich.
Falsch! :(

Wenn ich das OT richtig interpretiere, geht es darum, in einer Verzeichnisstruktur alles außer den Verzeichnissen selbst zu löschen. Dies ist mit der Option !-type d korrekt gelöst, während dein Vorschlag lediglich alle normalen Dateien löscht. Da ich jetzt nicht ausschließen kann, daß eventuell auch eine pipe oder ein symlink existiert, heißt das für mich, daß dein Vorschlag die Anforderung nicht erfüllt, da diese Dateien stehen bleiben würden.
Positiv formuliert sollte das Kriterium für find also heißen "-type f -o -type b -o -type c -o -type p -o -type l -o -type s" was dann je nach tatsächlichem Vorkommen von Dateiarten wieder eingeschränkt werden kann. Aber darüber liegen nun mal keine Informationen vor.

Gruß
XL
 
Die Verzeichnisstruktur könnte auch aus symbolischen Links bestehen ;)
 
Hallo
Darf ich mal das Subject zitieren:
Alle Dateien löschen, aber nicht die Verzeichnisse

Danach geht es hier eindeutig um Dateien.
Wie Xanti schon sagte, ist es durchaus möglich, dass Teile Der Verzeichnisstruktur aus Links bestehen!
(-type f) != (!-type d) habe ich nicht bestritten, aber eben darum geht es ja nicht.

Ok, belassen wir es dabei.

Gruß Wolfgang
 
Geht leider nicht bei allen Dateien. Es kommt immer die folgende Meldung:

bash: !-type: event not found
 
Geht leider nicht bei allen Dateien. Es kommt immer die folgende Meldung:

bash: !-type: event not found

Du hast das Leerzeichen vergessen.

Code:
 find /path ! -type d
Sei dir aber bewusst, dass auch Links die auf Verzeichnisse weisen gelöscht werden.
Bei meinem Vorschlag werden wirklich nur Dateien gelöscht.

Gruß Wolfgang
 
Hallo

Ich habe zum Bash gewechselt und es geht super. Natürlich mit find ./ !-type d -exec rm {} \;

Will sicher sein, dass alle Dateien gelöscht werden.

Besten Dank!
 
Hallo

Ich habe zum Bash gewechselt und es geht super. Natürlich mit find ./ !-type d -exec rm {} \;

Will sicher sein, dass alle Dateien gelöscht werden.

Besten Dank!
-type f löscht alle Dateien, aber eben nur Dateien.
! -type d löscht mehr. Nämlich alles was kein Verzeichnis ist.
Du solltest dir schon im Klaren sein was du wills.
Wenn du mir sagst, dass du alle Dateien löschen willst, komme ich immer wieder auf -type f.

Das wollte ich nur mal anmerken.

Gruß Wolfgang
 
Ist scho so dass ich alle Dateien löschen will. Mit -type f geht es nicht bei allen.

Scheints funktioniert !-type d nicht überall. Das ! Zeichen hats nicht geklappt. Aber bei bash geht es gut.

Danke
 
[Kruemel kack]
Laut Wikipedia ist alles Datei, unter Linux wie unter Unix. Da laut Titel alle Dateien ausser Verzeichnissen geloescht werden sollten, waeren wir doch wieder bei '! -type d', oder nicht?
[/Kruemel kack]
 
Wolfgang schrieb:
Wenn du mir sagst, dass du alle Dateien löschen willst, komme ich immer wieder auf -type f.
hansi1279 schrieb:
Ist scho so dass ich alle Dateien löschen will. Mit -type f geht es nicht bei allen.

MichEinesKommentarsEnthalt :brav:


Im Ernst: einem eventuell unerfahrenen Nutzer zu unterstellen, er könne zwischen einer 'normalen Datei', einer pipe und einem socket unterscheiden, ist eher gewagt.
Daß eine Verzeichnisstruktur auch aus symbolischen Links bestehen kann, ist zwar möglich aber für mich anhand der Anfrage unwahrscheinlich. Und selbst wenn: ein symlink ist kein Verzeichnis. Und in ein verlinktes Verzeichnis zu gehen und dort wiederum alle Dateien zu löschen ist bestenfalls ein Risiko. Schlimmstenfalls ein Totalschaden.

Gruß
XL
 
Natürlich haben rikola und x-lette völlig recht. Will hier auch niemand bestreiten. :)
Wer weiß aber vorher, was hansi1279 genau will. Und lieber einmal zuwenig löschen, als zuviel. ;)

Btw,

Code:
find -not -type d ...

sollte auch außerhalb der bash gehen.

Gruß, Daniel
 
Zuletzt bearbeitet:
Mist da komme ich wohl ein bißchen zu spät - ich wollte doch auch
noch ein bissi Klugscheißen :D
 

Ähnliche Themen

chown Befehl in einem Script

Verzeichnis mit 1200 Dateien auf Verweise in Textdateien checken

rsync Übertragung von Dateien zwischen zwei Servern

mehrere Textdateien gleichzeitig öffnen.

Komplette Spalten aus Datei löschen.

Zurück
Oben