Come escludo le directory quando si elencano i file nella directory corrente?
ls .
^ includerà le directory nell'elenco.
Come escludo le directory quando si elencano i file nella directory corrente?
ls .
^ includerà le directory nell'elenco.
Risposte:
Prova questo:
find . -maxdepth 1 -not -type d
ls .
senza directory - ed eccolo qui.
-ls
o -exec ls -l {} \;
lo farebbe come ls -l
senza directory.
Per ottenerlo esattamente equivalente a ls .
te non devi mostrare dir nascoste.
find . -maxdepth 1 -not -type d -and -not -name '.*'
e questo ti lascia ancora con './' prefissato per ogni nome file. Non è davvero un problema, ma penso che sia piuttosto brutto. Sono andato con:
ls -p | grep -v '/$'
E questo ti darà un elenco che sembra lo stesso, e puoi anche aggiungere ulteriori ls
argomenti. Aggiungi un --color=always
e riavrai i tuoi dircolor o -a
per vedere i file nascosti.
Mi piace la risposta di Alexander perché in realtà dipende dalle caratteristiche del filesystem del file in questione, quindi non verrà mai ingannato. La mia risposta verrà ingannata da un file che ha un '/' come ultimo carattere nel suo nome. Ma sembra che stia chiedendo problemi.
Anche se è un vecchio post, ma ho pensato che questo potesse aiutare ..
$ ls -l | grep -v ^ d
Elencherà tutti i file inclusi collegamenti simbolici, caratteri e file di blocco.
Le soluzioni "trova" sopra perdono alcune delle funzionalità di ls , ad esempio: elenca solo i file, ordinati in base al tempo di modifica decrescente.
Le risposte "ls -p | grep" non si occupano elegantemente di altri elementi di ls come -R, se lo si desidera
La risposta seguente, mentre più prolisso, a mio parere riflette il vero ls comportamento e massima flessibilità per la selezione di "solo i file"
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Basta sostituire gli interruttori ls come desiderato e il risultato verrà restituito solo con i file. Se sono necessari anche collegamenti e altri elementi, è necessario eseguire piccole modifiche al test per l'inclusione.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Con questo è ancora possibile utilizzare qualsiasi altra opzione di ls
solito prende. Oppure ... rimuovi -v
per elencare solo le directory. Oppure ... sostituisci la directory con qualsiasi altro tipo di file che file
capisca e riferisca, come ASCII, vuoto, ELF e così via.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
è circa 3 volte più veloce nei miei test
Ero su un sistema in cui il find
binario non supportava -not
e ho finito per usare:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Vantaggi: non si basa su nulla di diverso da sh ls echo
È compatibile con bash e dash
Può essere modificato per adattarsi ad altre cose (come le directory) cambiando -f
È più veloce di alcune delle risposte e utilizza meno RAM e CPU