grep/list bash rekursiv

grep/list bash rekursiv
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.

verwandte Informationen