Was soll das tun?
ls
listet Dateien im aktuellen Verzeichnis auf
$(ls)
ersetzt die Ausgabe von ls
Orten, die als Argument fürrm
- Im Wesentlichen
rm $(ls)
sollen alle Dateien im aktuellen Verzeichnis gelöscht werden
Was ist falsch mit diesem Bild ?
ls
Sonderzeichen 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 rm
after 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 find
Befehl 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 ~/.bashrc
Kü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)'