Qu'est-ce que cela est destiné à faire?
ls liste les fichiers dans le répertoire courant
$(ls)substitue la sortie des lslieux comme argument pourrm
rm $(ls)Est essentiellement destiné à supprimer tous les fichiers du répertoire actuel
Qu'est-ce qui ne va pas avec cette image ?
lsne peut pas gérer correctement les caractères spéciaux dans le nom de fichier. Les utilisateurs d'Unix conseillent généralement d'utiliser différentes approches . J'ai également montré cela dans une question connexe sur le comptage des noms de fichiers . Par exemple:
$ 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
$
En outre, comme il est correctement mentionné dans la réponse de Denis, un nom de fichier avec des tirets de tête peut être interprété comme un argument rmaprès substitution, ce qui va à l'encontre de l'objectif de suppression du nom de fichier.
Ce qui fonctionne
Vous souhaitez supprimer des fichiers dans le répertoire actuel. Utilisez donc 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
$
Vous pouvez utiliser la findcommande. Cet outil est fréquemment recommandé pour plus que le répertoire actuel - il peut parcourir récursivement toute l'arborescence de répertoires et fonctionner sur des fichiers via-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python n'a pas de problème avec les caractères spéciaux dans les noms de fichiers, nous pourrions donc également l'utiliser (notez que celui-ci est uniquement pour les fichiers, vous devrez l'utiliser os.rmdir()et os.path.isdir()si vous souhaitez opérer sur des répertoires):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
En fait, la commande ci-dessus pourrait être transformée en fonction ou en alias ~/.bashrcpar souci de concision. Par exemple,
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) ]'
}
La version Perl de ce serait
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'