tamaño recursivo por listar fecha extension directorios directorio contar comando carpeta buscar archivos linux

recursivo - listar archivos por tamaño linux



Recuento recursivo de archivos en un directorio de Linux (21)

¿Cómo puedo contar recursivamente los archivos en un directorio de Linux?

Encontré esto:

find DIR_NAME -type f ¦ wc -l

Pero cuando lo ejecuto me devuelve el siguiente error.

buscar: los caminos deben preceder a la expresión: ¦


Combinando varias de las respuestas aquí juntas, la solución más útil parece ser:

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c ''echo -e $(find "{}" -printf "/n" | wc -l) "{}"'' | sort -n

Puede manejar cosas extrañas como nombres de archivos que incluyen espacios entre paréntesis e incluso nuevas líneas. También ordena la salida por el número de archivos.

Puede aumentar el número después de -maxdepth para que también se cuenten los subdirectorios. Tenga en cuenta que esto puede llevar mucho tiempo, especialmente si tiene una estructura de directorios altamente anidada en combinación con un número alto de max.


Como los nombres de archivo en UNIX pueden contener nuevas líneas (sí, nuevas líneas), wc -l puede contar demasiados archivos. Me gustaría imprimir un punto para cada archivo y luego contar los puntos:

find DIR_NAME -type f -printf "." | wc -c


Con bash:

Cree una matriz de entradas con () y obtenga el conteo con #.

FILES=(./*); echo ${#FILES[@]}

Ok, eso no cuenta recursivamente los archivos, pero primero quería mostrar la opción simple. Un caso de uso común podría ser crear copias de seguridad de rollover de un archivo. Esto creará logfile.1, logfile.2, logfile.3 etc.

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

Para obtener el recuento de archivos de forma recursiva todavía podemos usar find de la misma manera.

FILES=(`find . -type f`); echo ${#FILES[@]}


En mi computadora, rsync es un poco más rápido que find | wc -l find | wc -l en la respuesta aceptada. Por ejemplo, puede contar los archivos en /Users/joe/ así:

[joe:~] $ rsync --stats --dry-run -ax /Users/joe/ /xxx Number of files: 173076 Number of files transferred: 150481 Total file size: 8414946241 bytes Total transferred file size: 8414932602 bytes

La segunda línea tiene el número de archivos, 150,481 en el ejemplo anterior. Como bonificación, también obtienes el tamaño total (en bytes).

Observaciones:

  • La primera línea es un recuento de archivos, directorios, enlaces simbólicos, etc., todos juntos, por eso es más grande que la segunda línea.
  • ¡La --dry-run (o -n para abreviar) es importante para no transferir realmente los archivos!
  • El parámetro /xxx puede ser cualquier carpeta vacía o no existente. No uses / aquí.
  • Utilicé la opción -x para "no cruzar los límites del sistema de archivos", lo que significa que si la ejecuta para / y tiene discos duros externos conectados, solo contará los archivos en la partición raíz.

Este enfoque alternativo con filtrado de formato cuenta con todos los módulos de kernel de grub disponibles:

ls -l /boot/grub/*.mod | wc -l


Esto debería funcionar:

find DIR_NAME -type f | wc -l

Explicación:

  • -type f para incluir solo archivos.
  • | ( y no ¦ ) redirige la salida estándar del comando find a la entrada estándar del comando wc .
  • wc (abreviatura de recuento de palabras) cuenta las nuevas líneas, palabras y bytes en su entrada ( docs ).
  • -Para contar solo nuevas líneas.

Notas:

  • Reemplace DIR_NAME con . para ejecutar el comando en la carpeta actual.
  • También puede eliminar el -type f para incluir directorios (y enlaces simbólicos) en el recuento.
  • Es posible que este comando se sobrecargue si los nombres de archivos pueden contener caracteres de nueva línea.

Explicación de por qué su ejemplo no funciona:

En el comando que mostró, no usa "Pipe" ( | ) para conectar dos comandos, sino la barra rota ( ¦ ) que el shell no reconoce como un comando o algo similar. Es por eso que recibe ese mensaje de error.


Esto funcionará completamente bien. Sencillo corto. Si desea contar el número de archivos presentes en una carpeta.

ls | wc -l


Hay muchas respuestas correctas aquí. ¡Aquí está otro!

find . -type f | sort | uniq -w 10 -c

donde es la carpeta para buscar y 10 es el número de caracteres por los que se debe agrupar el directorio.


He escrito ffcnt para acelerar el recuento recursivo de archivos en circunstancias específicas: discos rotativos y sistemas de archivos que admiten el mapeo de extensiones.

Puede ser un orden de magnitud más rápido que ls o enfoques basados ​​en la find , pero YMMV.


Para determinar cuántos archivos hay en el directorio actual, coloque en ls -1 | wc -l ls -1 | wc -l . Esto usa wc para hacer un recuento del número de líneas (-l) en la salida de ls -1 . No cuenta dotfiles. Tenga en cuenta que ls -l (que es una "L" en lugar de una "1" como en los ejemplos anteriores) que usé en versiones anteriores de este HOWTO realmente le dará un recuento de archivos uno mayor que el recuento real. Gracias a Kam Nejad por este punto.

Si desea contar solo archivos y NO incluir enlaces simbólicos (solo un ejemplo de lo que podría hacer), puede usar ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l (esta es una "L" no una "1" esta vez, queremos una lista "larga" aquí). grep busca cualquier línea que comience con "l" (que indica un enlace) y descarta esa línea (-v).

Velocidad relativa: "ls -1 / usr / bin / | wc -l" toma alrededor de 1.03 segundos en un 486SX25 descargado (/ usr / bin / en esta máquina tiene 355 archivos). " ls -l /usr/bin/ | grep -v ^l | wc -l " toma alrededor de 1.19 segundos.

Fuente: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


Para el directorio actual:

find . -type f | wc -l


Puedes usar

$ tree

después de instalar el paquete del árbol con

$ sudo apt-get install tree

(en una máquina Debian / Mint / Ubuntu Linux).

El comando muestra no solo el conteo de los archivos, sino también el conteo de los directorios, por separado. La opción -L se puede usar para especificar el nivel de visualización máximo (que, de forma predeterminada, es la profundidad máxima del árbol de directorios).

Los archivos ocultos también pueden incluirse proporcionando la opción -a .


Puedes usar el comando ncdu . Contará recursivamente cuántos archivos contiene un directorio de Linux. Aquí hay un ejemplo de salida:

Tiene una barra de progreso, que es conveniente si tiene muchos archivos:

Para instalarlo en Ubuntu:

sudo apt-get install -y ncdu

Punto de referencia: usé https://archive.org/details/cv_corpus_v1.tar (380390 archivos, 11 GB) como la carpeta donde uno tiene que contar el número de archivos.

  • find . -type f | wc -l find . -type f | wc -l : alrededor de 1m20s para completar
  • ncdu : alrededor de 1m20s para completar

Si desea evitar los casos de error, no permita que wc -l vea archivos con nuevas líneas (que contarán como 2+ archivos)

Por ejemplo, considere un caso en el que tenemos un solo archivo con un solo carácter EOL en él

> mkdir emptydir && cd emptydir > touch $''file with EOL(/n) character in it'' > find -type f ./file with EOL(?) character in it > find -type f | wc -l 2

Como al menos gnu wc no parece tener una opción para leer / contar una lista terminada en nulo (excepto en un archivo), la solución más sencilla sería no pasar los nombres de archivo, sino una salida estática cada vez que se encuentre un archivo. por ejemplo, en el mismo directorio que el anterior

> find -type f -exec printf ''/n'' /; | wc -l 1

O si tu find soporta.

> find -type f -printf ''/n'' | wc -l 1


Si desea saber cuántos archivos y subdirectorios existen desde el directorio de trabajo actual, puede usar esta línea única.

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c ''echo -e $(find {} | wc -l) {}'' | sort -n

Esto funcionará en la versión GNU y solo omitirá el comando -e del comando echo para BSD linux (por ejemplo, OSX).


Si desea un desglose de cuántos archivos hay en cada directorio bajo su directorio actual:

for i in $(find . -maxdepth 1 -type d) ; do echo -n $i": " ; (find $i -type f | wc -l) ; done

Eso puede ir todo en una línea, por supuesto. El paréntesis aclara qué salida se wc -l esté wc -l ( find $i -type f en este caso).


Si lo que necesita es contar un tipo de archivo específico de forma recursiva , puede hacer:

find YOUR_PATH -name ''*.html'' | wc -l

-l es solo para mostrar el número de líneas en la salida.


Tu podrías intentar :

find `pwd` -type f -exec ls -l {} ; | wc -l


encontrar -tipo f | wc -l

O (Si el directorio es el directorio actual)

encontrar . -tipo f | wc -l


ls -l | grep -e -x -e -dr | wc -l

  1. Larga lista
  2. filtrar archivos y directorios
  3. contar la linea filtrada sin

tree $DIR_PATH | tail -1

Salida de muestra:

5309 directorios, 2122 archivos