Ich versuche, find
Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen (rekursiv) zu löschen, die unterschiedlichen Mustern entsprechen, und drucke die übereinstimmenden Dateien aus, um stdout
zu 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 rm
nur 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 find
Befehl 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