¿Qué se pretende hacer con esto?
ls
enumera archivos en el directorio actual
$(ls)
sustituye la salida de ls
lugares que como argumento pararm
- Esencialmente
rm $(ls)
está destinado a eliminar todos los archivos en el directorio actual
Qué está mal con esta imagen ?
ls
no puede manejar correctamente caracteres especiales en el nombre del archivo. Los usuarios de Unix generalmente recomiendan usar diferentes enfoques . También lo he demostrado en una pregunta relacionada sobre el conteo de nombres de archivos . Por ejemplo:
$ 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
$
Además, como se menciona correctamente en la respuesta de Denis, un nombre de archivo con guiones iniciales podría interpretarse como un argumento para rm
después de la sustitución, lo que anula el propósito de eliminar el nombre de archivo.
Que funciona
Desea eliminar archivos en el directorio actual. Entonces usa 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
$
Puedes usar el find
comando. Esta herramienta se recomienda con frecuencia para algo más que el directorio actual: puede atravesar recursivamente todo el árbol de directorios y operar archivos a través de-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python no tiene problemas con los caracteres especiales en los nombres de archivo, por lo que podríamos emplear eso también (tenga en cuenta que este es solo para archivos, deberá usar os.rmdir()
y os.path.isdir()
si desea operar en directorios):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
De hecho, el comando anterior podría convertirse en función o alias ~/.bashrc
por brevedad. Por ejemplo,
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 versión de eso sería
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'