So löschen Sie den Inhalt eines Verzeichnisses in Centos


9

Ich muss den gesamten Inhalt eines Ordners in CentOS löschen, aber nicht den Ordner selbst.

Zum Beispiel: Ich habe einen Ordner mit dem Namen "MYFOLDER", der die Unterordner FOLD_1, FOLD_2, FOLD_3, FOLD_4 ... usw. und einige Dateien enthält. Ich muss alle diese Ordner und Dateien löschen, aber nicht den Containerordner MYFOLDER. Ich benötige dieses Verzeichnis, um die Ergebnisse eines vorherigen Prozesses zu steuern.

Ich habe es mit dem rm -rf Befehl versucht , aber dies löscht auch den Containerordner.

Antworten:


11

Löschen Sie stattdessen den Inhalt des Ordners.

rm -r MYFOLDER/*

1
Beachten Sie, dass dies keine Dateien / Verzeichnisse in MYFOLDER
tylerl

1
@tylerl: Wenn Sie shopt -s dotglobzuerst einstellen .
Jgoldschrafe

Dies erfordert, dass Sie j / n, das in jedes Unterverzeichnis absteigt, manuell genehmigen, was eine völlige Zeitverschwendung darstellt. Der richtige Befehl würde das alles automatisch verarbeiten, damit Sie nicht mit 50 Eingabeaufforderungen hängen bleiben.
CodeMed

rm -R /path/to/myfolder/*ist die richtige Syntax, um übermäßige Anforderungen zum Genehmigen des Löschens jeder Datei und jedes Unterordners zu vermeiden. Beachten Sie die Hauptstadt R.
CodeMed

5

Sie können verwenden:

rm -r MYFOLDER/{.[^.],.??*}

Dadurch werden auch die versteckten Dateien und Ordner gelöscht. Wenn sich zu viele Dateien im MYFOLDER-Verzeichnis befinden, sollten Sie stattdessen Folgendes ausführen:

ls MYFOLDER/{.[^.],.??*}|xargs rm -r

Ich habe über 500.000 Dateien in meinem meta/Verzeichnis, daher wollte ich die xargs-Alternative ausprobieren, erhalte jedoch die folgenden Fehlermeldungen: ls: cannot access meta/.[^.]: No such file or directory ls: cannot access meta/.??*: No such file or directory rm: missing operand
Andres SK

1
Stellen Sie sicher, dass Sie bashShell verwenden. Die Shell muss "Klammererweiterung" und "Reguläre Ausdrücke" für Dateimuster unterstützen.
Mircea Vutcovici

3

Meiner Meinung nach ist es am einfachsten, das gesamte Verzeichnis einschließlich sich selbst zu löschen und dann den Ordner neu zu erstellen. Es gibt Situationen, in denen dies keine gute Lösung ist (z. B. unbeaufsichtigte Skripte oder komplexere Pipelines), Sie jedoch nicht angegeben haben, warum Sie den Ordner nicht löschen möchten.

rm -rf foldername
mkdir foldername

Hoppla. Sie haben angegeben (ich habe Ihren Beitrag erneut gelesen). Nun, dennoch kann das Löschen und Neuerstellen funktionieren. Vor allem, wenn Sie Befehle miteinander verketten

rm -rf foldername && mkdir foldername

Oder

rm -rf foldername; mkdir foldername

Manchmal haben Sie keine Berechtigung im übergeordneten Ordner oder möchten bestimmte Attribute beibehalten, die Sie nicht kennen. Sie können beispielsweise Ihren Home-Ordner nicht als Nicht-Root-Benutzer löschen, aber Sie können alles darunter entfernen.
Mircea Vutcovici

Dies sollte die akzeptierte Antwort sein. +1
CodeMed

0

Wie wäre es mit

cd MYFOLDER
find . | rm -rf

Dadurch werden auch versteckte Dateien (die mit einem Punkt beginnen) gelöscht.


1
Dadurch wird auch MYFOLDER gelöscht.
Mircea Vutcovici


0

Ich empfehle diese Alternative dringend (sie entfernt auch Dateien mit Leerzeichen in Namen):

find MYFOLDER/ -type f -print0 | xargs -0 rm -f
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.