Antworten:
Falls Sie das Verzeichnis nicht entfernen können, können Sie immer find verwenden.
find . -maxdepth 1 -type f -exec rm -f {} \;
Dadurch werden alle Dateien im aktuellen Verzeichnis und nur das aktuelle Verzeichnis (keine Unterverzeichnisse) gelöscht.
find dir/to/delete -delete
(Spawnt keinen rm
Prozess pro zu löschender Datei).
find dir/to/delete -type f -delete
finden . -maxdepth 1 -type f -exec rm -f {} \;
es dauert einfach zu lange (eine Ausführung von rm pro Datei).
Dieser ist viel effizienter:
finden . -maxdepth 1 -type f -print0 | xargs -r0 rm -f
Da so viele Dateinamen wie Argumente für rm benötigt werden, wird rm beim nächsten Laden von Dateinamen ausgeführt. Es kann vorkommen, dass rm nur zwei- oder dreimal aufgerufen wird.
ionice
kurz zuvor rm
ist eine gute Idee, wenn der Computer gleichzeitig von anderen Personen verwendet wird.
Beides wird das Problem umgehen. Es ist eine Analyse der jeweiligen Leistung der einzelnen Technik über hier .
find . -name WHATEVER -exec rm -rf {} \;
oder
ls WHATEVER | xargs rm -rf
Das Problem ergibt sich aus der Bash-Erweiterung "*" mit jedem einzelnen Element im Verzeichnis. Beide Lösungen arbeiten stattdessen nacheinander durch jede Datei.
find . -print0 | xargs -0 rm
).
ls *
" und das " *
" erweitert die Argumentliste, dass Ihre Shell sich darüber beschwert, zu lang zu sein. Führen Sie ls .
stattdessen " " aus (oder gehen Sie eine Verzeichnisebene hinauf und tun Sie " ls [dirname]
").
Ich konnte dies tun, indem ich eine Ebene sicherte:
cd ..
Und läuft:
rm directory name -rf
Und dann das Verzeichnis neu erstellen.
Alle diese Fundaufrufe sind sehr nett, aber ich erinnere mich selten genau an die Nomenklatur, die ich brauche, wenn ich es eilig habe: Stattdessen benutze ich ls. Wie jemand erwähnt, ls. würde funktionieren, aber ich bevorzuge ls -1 wie in:
ls -1 | xargs -n 100 rm -rf
Die Zahl -n xxx ist ziemlich sicher, da das Überschreiten des Maximums entweder automatisch korrigiert wird (wenn size-max überschritten wird; siehe -s) oder wenn das args-max für eine App überschritten wird, ist dies normalerweise eher der Fall offensichtlich.
Es sollte beachtet werden, dass grep praktisch ist, um es in die Mitte dieser Kette einzufügen, wenn Sie nur eine Teilmenge von Dateien in einem großen Verzeichnis löschen möchten und aus irgendeinem Grund find nicht verwenden möchten.
Bei dieser Antwort wird davon ausgegangen, dass Sie Gnu-Kerndienstprogramme für Ihre ls, xargs usw. verwenden.
Hier ist eine Version zum Löschen einer großen Anzahl von Dateien, wenn das System reagieren muss.
Es funktioniert, indem Sie Arbeiten in kleinen Stapeln (standardmäßig 100 Dateien) ausgeben und ein wenig warten, bis andere Jobs abgeschlossen sind.
Hat hervorragend funktioniert, um über eine halbe Million Dateien aus einem einzigen Verzeichnis auf ext3 zu löschen. Der Prozentsatz wird als kleiner Bonus ausgegeben
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
Behebt Fehler "Argument zu lang" oder "Speicher kann nicht zugeordnet werden"
Dies hat den Trick bei mehr als 220.000 Dateien im Sitzungsordner ausgeführt.
Vorteil: Sofortiges Entfernen von Dateien
CD-Pfad / zu / Ordner
ls -f | xargs rm -f -v
KLICKEN Sie für einen Screenshot der zu entfernenden Dateien - (alle Dateien in ~ 15min entfernt)
-f (nach ls) verhindert das Vorsortieren
-v (nach rm) zeigt jede Datei als entfernt an
-f (nach rm) wird ohne Aufforderung für schreibgeschützte Dateien durchgesetzt
Tipp: Benennen Sie zuerst den Ordner (ex session in session_old) um, um zu verhindern , dass zusätzliche automatisch generierte Dateien hinzugefügt werden, während Sie versuchen, Dateien zu löschen. Sie können das ursprüngliche Verzeichnis manuell neu erstellen, wenn dies nicht automatisch der Fall ist, wie in meinem Fall