Cosa si intende fare?
ls
elenca i file nella directory corrente
$(ls)
sostituisce l'output di ls
luoghi 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?
ls
impossibile 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 find
comando. 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)'