Cosa si intende fare?
ls elenca i file nella directory corrente
$(ls)sostituisce l'output di lsluoghi che come argomentorm
- Essenzialmente ha lo
rm $(ls)scopo di eliminare tutti i file nella directory corrente
Cosa c'è che non va in questa immagine?
lsimpossibile gestire correttamente caratteri speciali nel nome file. Gli utenti di Unix generalmente consigliano di utilizzare approcci diversi . Ho anche dimostrato che in una domanda correlata sul conteggio dei nomi dei file . Per esempio:
$ 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
$
Inoltre, come correttamente menzionato nella risposta di Denis, un nome di file con trattini iniziali potrebbe essere interpretato come argomento a rm dopo la sostituzione, il che vanifica lo scopo di rimuovere il nome file.
Cosa funziona
Si desidera eliminare i file nella directory corrente. Quindi 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
$
Puoi usare il findcomando. Questo strumento è spesso consigliato non solo per la directory corrente: può attraversare ricorsivamente l'intero albero di directory e operare sui file tramite-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python non ha problemi con caratteri speciali nei nomi dei file, quindi potremmo anche impiegarlo (nota che questo è solo per i file, dovrai usare os.rmdir() e os.path.isdir()se vuoi operare su directory):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
In effetti, il comando sopra potrebbe essere trasformato in funzione o alias in ~/.bashrc per brevità. Per esempio,
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 versione di Perl sarebbe
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'