2009-04-26 8 views

Antwort

7

Sie können rm ./-1 verwenden, das ./ verweist auf das aktuelle Verzeichnis und da der Parameter nicht mit einem Bindestrich beginnt, wird er nicht als Option interpretiert.

+1

Ja, vor ./ ist in der Tat die klassische Lösung für dieses Problem. –

+0

dies scheint nicht zu funktionieren, wenn etwas wie grep -i Content-Type verwendet wird. * Pdf ./*.eml – BeowulfNode42

5

Soweit ich erinnere Zugabe - als Option auf der Kommandozeile wird der Befehl rm verursachen alle verbleibenden Argumente buchstäblich zu betrachten, so dass der Befehl

rm -- -1 

den Musikanten benannten Dateien entfernen. Beachten Sie, dass Sie immer noch shellextensions (wie '*' oder '?') Verwenden können, da die Shell diese vor erweitert, der Befehl ausgeführt wird (im Gegensatz zu DOS).

Bearbeiten: Als ich das erste Mal mit diesem Problem konfrontiert wurde, wusste ich nicht über die - Schalter, also schrieb ich ein kleines c-Programm, das den Dateinamen genauso wie das erste Argument entfernen würde. Dies ist einfach zu tun, da alle Posix-Betriebssysteme den unlink Systemaufruf enthalten, die die Datei mit dem Namen als Argument (Dump folgende in einen Terminal) gegeben entfernt:

remove_arg.c << EOF 
#include<unistd.h> 
int main(int argc, char **argv){ 
    unlink(argv[1]); 
} 
EOF 
gcc -o remove_arg remove_arg.c 
./remove_arg -1 

Dies auf jedem Unix-System arbeiten sollte , obwohl Sie möglicherweise gcc in cc ändern müssen oder was der lokale c-Compiler genannt wird.

+0

Dies funktioniert mit einem GNU- und einem BSD-Benutzerland, funktioniert jedoch möglicherweise nicht mit einem Solaris- oder AIX-Benutzerland . Die ./-1 Lösung ist portabler. Upvoted beide. –