parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
Ich muss grundsätzlich einen Ordner durchsuchen und mithilfe eines Bash-Skripts jedes Element im Ordner zurückgeben.
Funktioniert nicht über grep, obwohl es einen viel einfacheren Weg geben könnte. Die erste Zeile ist reiner Pseudo-No-Clue-Code.
Antwort1
Dies ist problemlos ohne Schleifen möglich.
Wenn Sie die Dateien einfach nur loswerden möchten, verwenden Sie einfach rm:
$ rm -rf /root/backups/*
Wenn Sie die Dateinamen beim Löschen anzeigen möchten, verwenden Sie stattdessen „find“:
$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;
Die Option -maxdepth weist find an, nicht tiefer als eine Ebene vom Startpunkt /root/backups abzusteigen. Die Option -mindepth weist find an, wo mit der Ergebnisrückgabe begonnen werden soll, und weist find damit effektiv an, den Startpunkt zu ignorieren. Die Option -print druckt lediglich die gefundenen Dateien auf dem Bildschirm aus. Mit -exec werden die {} durch die gefundenen Dateien ersetzt, sodass rm aufgerufen wird, um sie zu löschen.
EDIT: ein unnötiges -exec pro Kommentar wurde eliminiert
Antwort2
Ändern Sie den Grep-Befehl in:
für i in „ls -bRC1 /Pfad/*
; führe echo $i aus; rm $i; fertig
Das -b maskiert Leerzeichen und andere Zeichen, die mit dem rm zu Fehlern und unbeabsichtigten Folgen führen können. -R ist rekursiv. -C1 ist eine einzelne Spalte (was redundant sein kann). Ich würde das -rf überdenken
Möglicherweise möchten Sie find anstelle einer for-Schleife verwenden
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
Wenn Sie die Bedeutung der obigen Optionen nicht kennen, geben Sie ein man find
.
Antwort3
grep -l gibt Ihnen nur die Dateinamen
Teile = grep -rl ….
Antwort4
Sie möchten eine Liste der Dateinamen in einem bestimmten Verzeichnis. Es gibt ein Programm, das dies tut, und Sie werden sich schämen, seinen Namen zu lesen: ls
. Das ist alles, was es tut! Sie möchten eine rekursive Auflistung, die auch Dateien in Unterverzeichnissen enthält, also verwenden Sie ls -R
. Sie können die Ausgabe davon in eine Variable in Ihrem Skript einfügen und damit machen, was Sie wollen.