O que isso pretende fazer?
ls
lista arquivos no diretório atual
$(ls)
substitui a saída de ls
lugares que, como argumento pararm
- Essencialmente, o
rm $(ls)
objetivo é excluir todos os arquivos no diretório atual
O que está errado com esta imagem ?
ls
não pode lidar adequadamente com caracteres especiais no nome do arquivo. Usuários do Unix geralmente recomendam usar abordagens diferentes . 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, como corretamente mencionado na resposta de Denis, um nome de arquivo com os principais traços, poderia ser interpretado como argumento para rm
após a substituição, o que frustra a finalidade de remover nome de 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 find
comando Essa ferramenta é frequentemente recomendada para mais do que apenas o diretório atual - ela pode percorrer recursivamente toda a árvore de diretórios 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 possui problemas com caracteres especiais nos nomes de arquivos, portanto, podemos empregá-lo também (observe que este é apenas para arquivos, você precisará usar os.rmdir()
e os.path.isdir()
se desejar operar em diretórios):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
De fato, o comando acima pode ser transformado em função ou alias ~/.bashrc
por uma questão de 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 Perl disso seria
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'