El comando :
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
me esta dando:
41G /Users/user/Big folder
¿Cómo puedo extraer la ruta para reutilizarla en mi script?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
Salida
/Users/user/Big
Lo cual es inutilizable, donde busco un resultado como:
/Users/user/Big\ folder
Respuesta1
Al realizar un procesamiento automatizado, no le complique la vida utilizando números en diferentes unidades. No pases -h
a du
. Luego puede utilizar una clasificación numérica simple en la salida y su secuencia de comandos seguirá funcionando si tiene más de 1 TB en uno de los directorios.
du -s ~/* | sort -k 1n | tail -n1
Esto siempre imprime una línea, incluso si el subdirectorio más grande contiene menos de 1 GB. Si eso no es lo que desea, puede reemplazar el condicional "es la salida vacía" por "es el número menor que el umbral".
Para extraer el nombre del directorio, tome la salida y elimine la parte hasta la primera pestaña.
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
Respuesta2
POSIXLY:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
Sin -h
, du
el resultado incluye un número simple para el tamaño, por lo que podemos ordenarlo fácilmente sin archivos grep
.
Usando sed
para realizar la eliminación solo en la primera línea y luego saliendo, guardamos una head
invocación.
Respuesta3
Otra forma de extraer la ruta que desea es mediante read
un comando después de haber terminado de hacer las du
cosas sort-ed
y luego pasar alwhile/read
du.. sort.. | while read x d; do echo "$d"; done