Löschen Sie mehrere Dateimuster mit einem Befehl (find).

Löschen Sie mehrere Dateimuster mit einem Befehl (find).

Ich versuche, findDateien im aktuellen Verzeichnis und in den Unterverzeichnissen (rekursiv) zu löschen, die unterschiedlichen Mustern entsprechen, und drucke die übereinstimmenden Dateien aus, um stdoutzu wissen, welche gelöscht wurden.

Ich möchte beispielsweise alle Dateien abgleichen, die mit '&' beginnen, und alle Dateien, die mit '$' beginnen und enden.
Ich habe Folgendes versucht:

find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;

aber rmnur auf die letzte Übereinstimmung anwenden ('$*$').
Also habe ich versucht:

find . -type f -name '&*' -or -type f -name '$*$' -delete

Dies stimmt jedoch nicht nur mit dem letzten Muster überein, sondern gibt auch die gelöschten Dateien nicht aus.
Ich weiß, dass ich Folgendes tun kann:

rm -v ``find -type f -name '&*' -or -type f -name '$*$'``

aber ich würde diese Art von Ansatz wirklich gerne vermeiden und es mit findBefehl tun.

Irgendwelche Tipps?
Danke im Voraus.

Antwort1

Ihr Problem ist, dassAusführunggilt nur für das zweite Muster. Versuchen Sie, Ihre Suchbedingungen in Klammern zu setzen, um das zu beheben:

find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;

Zu beachten ist, dass es sich hierbei nicht um einen Fehler, sondern um eine Funktion handelt, mit der Sie etwa Folgendes tun können:

find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'

wenn du musst

Antwort2

ObwohlZeppelinAntwort ist richtig, ich habe auch diese Lösung gefunden:

suchen . -typ f \( -name '&*' -oder -name '$*$' \) -drucken -löschen

verwandte Informationen