Estoy tratando de encontrar el archivo más grande en un directorio de forma recursiva. Si hay un subdirectorio dentro de ese directorio, la función debe ir dentro de ese directorio y verificar si el archivo más grande está allí. Una vez que se encuentra el archivo más grande, la salida se muestra con el nombre de la ruta relativa y el nombre y el tamaño del archivo más grande.
EX:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
Esto es lo que tengo:
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
He estado atrapado por un tiempo ahora. No puedo implementar esto al canalizar una serie de herramientas Unix existentes. Cualquier idea sería buena!
bash
shell-script
recursive
user2419571
fuente
fuente
for d in */ .[^.]*/
; do ... `Respuestas:
use
find
(aquí suponiendo GNUfind
) para generar nombres de archivo con el tamaño del archivo. ordenar. imprime el más grande.Eso supone que las rutas de los archivos no contienen caracteres de nueva línea.
Usando un bucle
bash
con la implementación de GNU destat
:Esto será significativamente más lento que la solución de búsqueda. Eso también supone que los nombres de archivo no terminan en caracteres de nueva línea y omitirán los archivos ocultos y no descenderán a directorios ocultos.
Si hay un archivo llamado
-
en el directorio actual, se considerará el tamaño del archivo abierto en stdin.Tenga en cuenta que las versiones
bash
anteriores a 4.3 seguían enlaces simbólicos al descender el árbol de directorios.fuente
tail -n 1 <(sort -n <(find . -type f -printf "%s\t%p\n"))
)Este comando también ayuda a enumerar el tamaño definido.
fuente
Esto funciona en BSD / macOS:
También puede adjuntar
| head -n 3
para mostrar el número de entradas interesantes (3 en este caso).fuente
man find
yman sort
, use brainz :-)Con
zsh
, para el archivo regular más grande:(por supuesto, puede reemplazarlo
ls -ld --
con cualquier comando. Si usa GNUls
o compatible, consulte también la-h
opción para tamaños legibles por humanos ).
: solo archivos normales (no directorios, enlaces simbólicos, dispositivos, fifos ...)D
: incluye los ocultos y desciende a directorios ocultosOL
: orden inverso por tamaño (L
ength).[1]
: solo el primer partido.Si hay empates, obtendrás cualquiera de ellos al azar. Si desea el primero en orden alfabético, agregue un extra
on
(o
rder byn
ame) para ordenar los lazos alfabéticamente.Tenga en cuenta que considera el tamaño de los archivos, no el uso del disco.
fuente
[1]
con[1,10]