Qu'est-ce que cela est destiné à faire?
ls
liste les fichiers dans le répertoire courant
$(ls)
substitue la sortie des ls
lieux 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 ?
ls
ne 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 rm
aprè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 find
commande. 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 ~/.bashrc
par 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)'