Was soll das tun?
ls listet Dateien im aktuellen Verzeichnis auf
$(ls)ersetzt die Ausgabe von lsOrten, die als Argument fürrm
- Im Wesentlichen
rm $(ls)sollen alle Dateien im aktuellen Verzeichnis gelöscht werden
Was ist falsch mit diesem Bild ?
lsSonderzeichen im Dateinamen können nicht richtig behandelt werden. Unix-Benutzer empfahlen im Allgemeinen , unterschiedliche Ansätze zu verwenden . Ich habe das auch in einer verwandten Frage zum Zählen von Dateinamen gezeigt . Zum Beispiel:
$ touch file$'\n'name
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$
Wie in Denis 'Antwort richtig erwähnt, könnte ein Dateiname mit führenden Bindestrichen auch als Argument für rmafter substitution interpretiert werden , was den Zweck des Entfernens des Dateinamens zunichte macht.
Was funktioniert
Sie möchten Dateien im aktuellen Verzeichnis löschen. Also benutze glob rm *:
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$ rm *
$ ls
$
Sie können den findBefehl verwenden. Dieses Tool wird häufig nicht nur für aktuelle Verzeichnisse empfohlen. Es kann den gesamten Verzeichnisbaum rekursiv durchlaufen und Dateien über verarbeiten-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python hat keine Probleme mit Sonderzeichen in Dateinamen, daher können wir dies auch verwenden (beachten Sie, dass dies nur für Dateien gilt, die Sie verwenden müssen os.rmdir()und os.path.isdir()wenn Sie mit Verzeichnissen arbeiten möchten):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
Tatsächlich könnte der obige Befehl der ~/.bashrcKürze halber in eine Funktion oder einen Alias umgewandelt werden . Beispielsweise,
rm_stuff()
{
# Clears all files in the current working directory
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
}
Perl-Version davon wäre
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'