2016-08-02 8 views
2

Ich muss einen Befehl platzieren, der nach allen Dateien im aktuellen Verzeichnis sowie in seinen Unterverzeichnissen - Ende von ~, und/oder alle Dateien suchen wird, die beginnen oder enden #. Die Befehlszeile zeigt alle gefundenen Dateien an und löscht sie. Nur ein Befehl ist erlaubt: Nein ';' oder '& &' oder andere Spielereien.Unix finden Befehl im Terminal funktioniert nicht

hier ist mein Befehl:

find . -name "#*" -o -name "*#" -o -name "*~" -print -delete 

aber es löscht nur die Dateien, die auf ~

+0

Apostrophe Versuchen statt doppelte Anführungszeichen für den Namen Platzhalter. Einige Shells werden die Interpolation für Sie mit doppelten Anführungszeichen durchführen, ähnlich wie Perl und PHP mit Strings. – alzee

+0

Ich bin mir ziemlich sicher, dass das nicht das Problem ist. Ich sehe das gleiche Problem hier (mit GNU finden Sie 4.4.2). Ich weiß nicht, was das Problem ist. –

+3

Sie haben vergessen, die Bedingungen in Parens '()' beizufügen. Daher hat nur die letzte Bedingung die '-Print' und' -Delete' ausgelöst. Versuchen Sie 'finden. \ (-name "# *" -o Name "* #" -o Name "* ~" \) -print -delete ". – alvits

Antwort

2

Sie haben vergessen, die Bedingungen mit Klammern () zu umschreiben. Dies bedeutet, dass nur die letzte Bedingung die Aktionen -print und -delete auslöst.

Der Standardwert ist und -a, die die Klammer nicht benötigen würde, deshalb die meisten Befehle finden, wie find -type f -name "pattern" -print ohne Klammern funktioniert.

sollten Sie versuchen:

find . \(-name "#*" -o -name "*#" -o -name "*~" \) -print -delete 
0

Wie wäre es -print0 primäre in Verbindung mit xargs -0'' so.

find . -type f -print0 | xargs -0 rm 

za:temp za$ ls 
file.txt file.txt~ 
za:temp za$ find . -name "*~" -print0 | xargs -0 rm 
za:temp za$ ls 
file.txt 

Oder mit xargs -I {} plus Ihrem comand, das das Gleiche tut.

# xargs -I {} to capture the value of find 
find . -iname *something* | xargs -I {} rm {} 

edit: wenn Sie die Dateien nicht sehen können, die file.txt mit # mit find . dann die Dateien Leerzeichen im Namen der Datei (en) wie # beginnen. Sie müssen Dateien mit Leerzeichen wie find . -name "* *" suchen und dann die Leerzeichen entfernen.