La opción -U
para ls
no está en POSIX, y en la ls
OS X tiene un significado diferente de GNU ls
, que es que hace -t
y -l
horas de creación de empleo en lugar de tiempos de modificación -f
está en POSIX como una extensión XSI. El manual de GNU ls
describe -f
como do not sort, enable -aU, disable -ls --color
y -U
como do not sort; list entries in directory order
.
POSIX describe -f
así:
Fuerza de cada argumento que se interpreta como un directorio y la lista el nombre que se encuentra en cada ranura. Esta opción se desactivará -l
, -t
, -s
y -r
, y se activará -a
; el orden es el orden en que las entradas aparecen en el directorio.
Los comandos como ls|wc -l
dan el resultado incorrecto cuando los nombres de archivo contienen líneas nuevas.
En zsh se puede hacer algo como esto:
a=(*(DN));echo ${#a}
D
(glob_dots
) incluye archivos cuyo nombre empieza por un período y N
(null_glob
) hace que el comando no da lugar a un error en un directorio vacío .
o el mismo en bash:
shopt -s dotglob nullglob;a=(*);echo ${#a[@]}
Si IFS
contiene dígitos ASCII, agregue comillas dobles ${#a[@]}
. Agregue shopt -u failglob
para asegurarse de que failglob
esté desarmado.
Una opción es utilizar portátil find
:
find . ! -name . -prune|grep -c/
grep -c /
pueden ser sustituidos por wc -l
si los nombres de archivos no contienen nuevas líneas. ! -name . -prune
es una alternativa portátil a -mindepth 1 -maxdepth 1
.
O aquí hay otra alternativa que no suele incluir archivos cuyo nombre empieza por un período:
set -- *;[ -e "$1" ]&&echo "$#"
El comando anterior Sin embargo, incluye archivos cuyo nombre empieza por un período en que una opción como dotglob
en bash o glob_dots
en zsh está establecido. Cuando *
no coincide con ningún archivo, el comando da como resultado un error en zsh con la configuración predeterminada.
¿Qué parte de 'ls | wc -l' no es O (1)? – halfdan
ls | wc -l hará que l haga un opendir(), readdir() y probablemente un stat() en todos los archivos. Esto generalmente será al menos O (n). – MarkR
@halfdan: ls muestra todos los archivos, por lo que es O (n) – yassin