Что это должно сделать?
ls
выводит список файлов в текущем каталоге
$(ls)
заменяет вывод ls
мест, которые в качестве аргумента дляrm
- По сути
rm $(ls)
предназначен для удаления всех файлов в текущем каталоге
Что не так с этой картиной?
ls
не может правильно обрабатывать специальные символы в имени файла. Пользователи Unix обычно советуют использовать разные подходы . Я также показал это в связанном вопросе о подсчете имен файлов . Например:
$ 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
$
Также, как правильно упомянуто в ответе Дениса, имя файла с начальными чертами может быть интерпретировано как аргумент rm
после подстановки, что лишает цели удаления имени файла.
Что работает
Вы хотите удалить файлы в текущем каталоге. Так что используйте 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
$
Вы можете использовать find
команду. Этот инструмент часто рекомендуется использовать не только для текущего каталога - он может рекурсивно обходить все дерево каталогов и работать с файлами с помощью-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
В Python нет проблем со специальными символами в именах файлов, поэтому мы могли бы использовать это также (обратите внимание, что это только для файлов, вам нужно будет использовать, os.rmdir()
и os.path.isdir()
если вы хотите работать с каталогами):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
Фактически, приведенная выше команда может быть преобразована в функцию или псевдоним ~/.bashrc
для краткости. Например,
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 версия этого будет
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'