Ich möchte alle bis auf die 4 neuesten Verzeichnisse in meinem Elternverzeichnis löschen. Wie würdest du das in Bash machen?Löschen Sie alle bis auf die 4 neuesten Verzeichnisse
Antwort
ls -atrd */ | head --lines=-4 | xargs rm -rf
Edit: hinzugefügt ‚a‘ Argument
lsDies wird 4 zuletzt geänderte Verzeichnisse anstelle der 4 zuletzt erstellten, nicht bemerken, Verzeichnisse beginnend mit einem Punkt, Kopf bricht für Namen, die Zeilenumbrüche, Xargs wird brechen für Namen, die Leerzeichen enthalten, und rm wird eine Fehlermeldung ausgeben wenn es nichts zu löschen gibt. –
Gute Punkte. Ich habe jetzt 'a' zu ls hinzugefügt, um Verzeichnisse mit einem Punkt zu erfassen, und grepped, um die aktuellen und übergeordneten Verzeichnisse loszuwerden, aber Sie haben Recht. Dies ist eine einfache Antwort mit einigen wichtigen Einschränkungen, auf die Sie hingewiesen haben. –
Korrektur: Es wird kein grep benötigt, um das aktuelle und das übergeordnete Verzeichnis zu filtern, da sie nicht durch ls * / –
Bitte klären Sie, wenn Sie „alle Verzeichnisse löschen, aber die vier newst ones“ bedeuten oder „alles (Dateien und Verzeichnisse) löschen, außer daß die vier neueste Verzeichnisse ".
Bitte beachten Sie auch, dass die Erstellungszeiten für Verzeichnisse nicht bekannt sind. Man kann nur feststellen, wann ein Verzeichnis zuletzt geändert wurde, das heißt, ob Dateien hinzugefügt, entfernt oder umbenannt wurden.
Sie könnte wie folgt vorgehen:
#!/bin/bash
#store the listing of current directory in var
mydir=`ls -t`
it=1
for file in $mydir
do
if [ $it -gt 5 ]
then
echo file $it will be deleted: $file
#rm -rf $file
fi
it=$((it+1))
done
(die # vor rm zu entfernen, um es wirklich geschehen;))
Ein weiterer, BSD-Safe, Art und Weise, es zu tun, mit Arrays (warum nicht?)
#!/bin/bash
ARRAY=(`ls -td */`)
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done
- 1. svn export alle bis auf einige Verzeichnisse
- 2. Ersetzen Sie alle Zeichen mit #, bis auf die letzten 4
- 3. Schienen zerstören alle bis auf die neuesten n Datensätze
- 4. Löschen Sie alle bis auf eine Spalte von Pandas Dataframe?
- 5. Bash. Löschen Sie alle Dateien und Verzeichnisse, aber bestimmte
- 6. Löschen einer Sammlung von Sammlungen - Löschen Sie alle Elemente zuerst oder löschen Sie alle auf einmal?
- 7. Alle bis auf wenige Knoten im TensorFlow-Diagramm löschen
- 8. Löschen Sie Verzeichnisse älter als X Tage
- 9. Erhalten Sie die neuesten Jobdaten für alle einzigartigen Jobs
- 10. Löschen Sie alle gespeicherten Prozeduren auf einmal
- 11. Finden Sie alle Verzeichnisse in einem Verzeichnis
- 12. Shell win32 älteste Verzeichnisse löschen (rekursiv)
- 13. Wie listet man alle Verzeichnisse rekursiv auf?
- 14. Regex übereinstimmen alle 1 bis 2 Ziffern ausschließen 4 Ziffern
- 15. C++ müssen Header enthalten viele Verzeichnisse bis
- 16. Wie durchlaufen Verzeichnisse in Powershell und verschieben Sie die Verzeichnisse?
- 17. überprüfen Sie die Zeit zwischen 9.30 bis 4 Ruby
- 18. Löschen Sie alle zugehörigen Datensätze
- 19. Löschen Sie Datensätze, die als Duplikate gelten, basierend auf demselben Wert für eine Spalte, und behalten Sie die neuesten
- 20. Atom: nicht Tab auf die neuesten
- 21. Alles löschen, bis auf zwei Dateien
- 22. Alle Dateien löschen, aber alle Verzeichnisse in einem Bash-Skript behalten?
- 23. Löschen Sie alle Werte wiederholt
- 24. .htaccess Login auf Verzeichnisse, die nicht existieren?
- 25. gehen einige Verzeichnisse bis in Linux
- 26. Holen Sie sich alle Ordner/Verzeichnisse Liste in VB.net
- 27. Linux: Setzen Sie die Erlaubnis nur auf Verzeichnisse
- 28. Löschen Sie alle Zeilen mit
- 29. Ansible, löschen Sie alles außer X neuesten Ordnern
- 30. Verarbeiten Sie mehrere Verzeichnisse und alle Dateien innerhalb von snakemake
Sie können die Erstellungszeit von Dateien oder Verzeichnissen nicht abrufen, da sie nirgendwo gespeichert ist. Der nächste, den Sie bekommen können, ist die Inode Change Time: http://www.faqs.org/faqs/unix-faq/faq/part3/section-1.html und das Hinzufügen oder Entfernen von Dateien aus Verzeichnissen ändert den Inode. –
... obwohl das Hinzufügen oder Entfernen von Dateien aus einem Child-Verzeichnis * keinen * Eltern-Inode ändert. –