2016-05-04 21 views
0

Kann mir jemand sagen, was falsch ist in der folgenden Art der Datei Löschung, die mit "#" beginnt.Was ist falsch im folgenden Ansatz (rm + xargs)

Dateien im Verzeichnis:

[email protected]:~/.scratch/hmm$ ls 
five #four #one six #three #two 
[email protected]:~/.scratch/hmm$ 

[email protected]:~/.scratch/hmm$ ls . |grep "#.*" |xargs rm -rf 
[email protected]:~/.scratch/hmm$ ls 
five six 
[email protected]:~/.scratch/hmm$ 

Ps: Fragen in Bezug der folgenden Fragen

Bash: How do I delete all my textfiles starting with #?

+1

Warum brauchen Sie 'ls' und' grep'. Es kann nur 'rm sein - ./#*' – anubhava

+1

Sie können meinen ähnlichen Kommentar zu Ihrer früheren Frage auch sehen – anubhava

+0

Ich tat und ich mochte Ihre mehr, wie es einfach ist, wollte ich wissen, ob etwas falsch in diesem ... Da ich mit XARGs nicht sehr vertraut bin, möchte ich wissen, ob XARGS richtig verwendet wird, oder einfach durch Zufall, dass ich gewünschte Ergebnisse erziele. – monk

Antwort

0

ls könnten die Dateien in mehrere Spalten auflisten und Ihre regexp nicht an den Anfang verankert des Dateinamens, entweder. Dateinamen, die Leerzeichen enthalten, sind ebenfalls problematisch.

+0

ahh enthalten können, jetzt habe ich es. Es könnte jede Datei löschen, die # dazwischen hat. Folgendes sollte besser sein ls. | grep "^ #. *" | xargs rm -rf – monk

+0

Besser, aber immer noch nicht gut genug. Zumindest müssen Sie auch "ls -1" sagen. –

+0

@MichaelVehrs 'ls' verwendet standardmäßig eine Spalte, wenn die Standardausgabe kein Terminal ist. – chepner