Extraiga la ruta del archivo compatible con Unix con espacio desde la salida del comando

Extraiga la ruta del archivo compatible con Unix con espacio desde la salida del comando

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 -ha 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, duel resultado incluye un número simple para el tamaño, por lo que podemos ordenarlo fácilmente sin archivos grep.

Usando sedpara realizar la eliminación solo en la primera línea y luego saliendo, guardamos una headinvocación.

Respuesta3

Otra forma de extraer la ruta que desea es mediante readun comando después de haber terminado de hacer las ducosas sort-edy luego pasar alwhile/read

du.. sort.. | while read x d; do echo "$d"; done

información relacionada