O que isso pretende fazer?
-
ls
lista arquivos no diretório atual -
$(ls)
substitui a saída dels
coloca como argumento pararm
- Essencialmente
rm $(ls)
destina-se a excluir todos os arquivos no diretório atual
O que há de errado com essa foto?
ls
não pode manipular corretamente caracteres especiais no nome do arquivo. Usuários de Unix geralmente recomendam usar abordagens diferentes. Eu também mostrei isso em uma pergunta relacionada sobre a contagem de nomes de arquivos . Por exemplo:
$ 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
$
Além disso, conforme mencionado na resposta de Denis, um nome de arquivo com traços iniciais pode ser interpretado como argumento para rm
após a substituição, o que anula o propósito de remover o nome do arquivo.
O que funciona
Você deseja excluir arquivos no diretório atual. Então use 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
$
Você pode usar o comando find
. Esta ferramenta é freqüentemente recomendada para mais do que apenas o diretório atual - ela pode percorrer recursivamente a árvore de diretório inteira e operar em arquivos via -exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
O Python não tem problemas com caracteres especiais em nomes de arquivos, então podemos empregar isso também (note que este é apenas para arquivos, você precisará usar os.rmdir()
e os.path.isdir()
se você quiser operar diretórios):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
Na verdade, o comando acima pode ser transformado em função ou alias em ~/.bashrc
para brevidade. Por exemplo,
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) ]'
}
Versão em Perl disso seria
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'