Recién estamos comenzando una clase de UNIX y estamos aprendiendo una variedad de comandos Bash. Nuestra tarea implica ejecutar varios comandos en un directorio que también tiene varias carpetas debajo.
Sé cómo enumerar y contar todos los archivos regulares de la carpeta raíz usando:
find . -type l | wc -l
Pero me gustaría saber a dónde ir desde allí para encontrar el archivo más grande en todo el directorio. He visto du
algunas cosas con respecto a un comando, pero no lo hemos aprendido, así que en el repertorio de cosas que hemos aprendido, supongo que necesitamos conectarlo de alguna manera al ls -t
comando.
Y perdóname si mi 'jerga' no es correcta, ¡todavía me estoy acostumbrando!
man
seguido del comando que le interesa. Aparecerá una buena entrada manual para ese comando (presioneq
para volver a la línea de comandos).Respuestas:
Cita de este enlace
fuente
'%s %p\n'
con'%p\n'
y añadiendo|xargs ls -lh
al finaldu -am . | sort -nr | grep '\..*\.' | head
. Elm
es el tamaño de archivo de pantalla en megabytes y se utilizagrep
para líneas muestran con al menos dos puntos, el primero es en el./
en el camino, el segundo es en la extensión de archivo, por ejemplo.mov
.Para encontrar los 25 archivos principales en el directorio actual y sus subdirectorios:
find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25
Esto generará los 25 archivos principales ordenándolos según el tamaño de los archivos mediante el comando canalizado "sort -nr -k5".
Lo mismo pero con tamaños de archivo legibles por humanos:
find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25
fuente
salidas
Si solo quiere el nombre del archivo:
Esto evita usar
awk
y le permite usar las banderas que deseels
.Advertencia . Debido a que
xargs
intenta evitar construir líneas de comando demasiado largas, esto podría fallar si lo ejecuta en un directorio con muchos archivos porquels
termina ejecutándose más de una vez. No es un problema insuperable (puede recopilar lahead -n 1
salida de cadals
invocación y ejecutarls -S
nuevamente, repitiendo hasta que tenga un solo archivo), pero estropea un poco este enfoque.fuente
xargs
, te he descuidado +1find . -type f -print0 | xargs -0 ls -lS | head -n 1
xargs
ha ejecutado. Para solucionarlo añadir clasificar:find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10
. Trabajó en OSX para mí.No existe un comando simple disponible para encontrar los archivos / directorios más grandes en un sistema de archivos Linux / UNIX / BSD. Sin embargo, con la combinación de los siguientes tres comandos (usando tuberías) puede encontrar fácilmente la lista de archivos más grandes:
Si desea una salida más legible por humanos, intente:
Dónde,
fuente
Esto enumera los archivos de forma recursiva si son archivos normales, los ordena por el séptimo campo (que es el tamaño en mi
find
salida; verifique el suyo) y muestra solo el primer archivo.La primera opción
find
es la ruta de inicio para la búsqueda recursiva. Un tipo def
búsquedas de archivos normales. Tenga en cuenta que si intenta analizar esto como un nombre de archivo, puede fallar si el nombre de archivo contiene espacios, líneas nuevas u otros caracteres especiales. Las opcionessort
también varían según el sistema operativo. Estoy usando FreeBSD.Una solución "mejor" pero más compleja y más pesada sería
find
atravesar los directorios, pero quizás usarstat
para obtener los detalles sobre el archivo, luego quizás usarawk
para encontrar el tamaño más grande. Tenga en cuenta que la salida destat
también depende de su sistema operativo.fuente
+7
supone que debe hacer el arg? En mi máquina, sort se queja de que no puede encontrar un archivo llamado+7
.sort
su sistema. Estoy usando OS X 10.4 en este momento, donde el uso se deriva del tipo de FreeBSD :sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
... Note el+POS [-POS2]
. Esto también funciona en las versiones actuales de FreeBSD.-k
argumento, por ejemplo.sort -k 7
. editar: por OSX 10.5, la página de manual para ordenar parece haber cambiado a la versión que tengo.[+POS1] [-POS2]
notación es más antigua. Por lo que puedo decir, esta notación todavía es compatible con la clasificación GNU moderna, aunque ahora que miro, parece que se ha eliminado de la página del manual de clasificación después de la versión 5.1. Puede verlo en la página de manual de sort para FreeBSD 4.11 . ¡Supongo que no he leído la página de manual de sort desde antes del lanzamiento de FreeBSD 5.0!+POS1
cuenta que los recuentos ordenan los parámetros desde cero, mientras que los-k POS1
recuentos desde uno.Esto encontrará el archivo o carpeta más grande en su directorio de trabajo actual:
Para encontrar el archivo más grande en todos los subdirectorios:
fuente
ls
. En mis pruebas, la-S
bandera mostrará un archivo por línea. He corregido el segundo comando. Con suerte, ahora es completamente a prueba. Gracias.En Solaris uso:
o
porque cualquier otra cosa publicada aquí no funcionó. Esto encontrará el archivo más grande en
$PWD
y subdirectorios.fuente
Pruebe el siguiente resumen (muestre los 20 archivos más grandes):
o (tamaños legibles por humanos):
Entonces, estos alias son útiles para tener en sus archivos rc :
fuente
Intente seguir el comando:
Esto imprimirá el nombre y tamaño de archivo más grande y más de 500M. Puede mover el
if($1 > 500000)
, e imprimirá el archivo más grande del directorio.fuente
du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1
o
du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'
fuente
Este script simplifica la búsqueda de archivos más grandes para acciones posteriores. Lo guardo en mi directorio ~ / bin y pongo ~ / bin en mi $ PATH.
fuente
Esa es una forma bastante más sencilla de hacerlo:
Y obtendrás esto:
8445 examples.desktop
fuente
1***
supone que debe hacer al final? Recibo un error de "no se encontraron coincidencias" para ese argumento.Solución Linux: Por ejemplo, desea ver la lista de todos los archivos / carpetas de su directorio de inicio (/) según el tamaño del archivo / carpeta ( orden descendente ).
sudo du -xm / | sort -rn | más
fuente
Para enumerar el archivo más grande en una carpeta
El resultado de
ls -sh
es una vista de tamaños
yh
comprensible por humanos del número de tamaño de archivo.Podrías usar
ls -shS /pathFolder | head -n 1
. Cuanto más grande seaS
desdels
ya pedir la lista de los archivos más grandes a las más pequeñas, pero el primer resultado de su la suma de todos los archivos de esa carpeta. Entonces, si solo desea enumerar el archivo más grande, un archivo, debehead -n 2
verificar el "resultado de la segunda línea" o usar el primer ejemplo conls sort head
.fuente
fuente