¿Por qué este comando no funciona como alias?

¿Por qué este comando no funciona como alias?

He estado usando el siguiente comando para enumerar los diez archivos más grandes, en cualquier profundidad, en el directorio actual:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'

(Yo uso awken lugar de headpara prevenir unaerror de tubería rotacuando la lista es demasiado larga)

Funciona bien, pero evidentemente es difícil recordarlo y escribirlo cada vez. Intenté poner esto en .bash_aliases, pero no funciona (imprime 10 líneas vacías).

Si uso lessen lugar de awk, el resultado se presenta correctamente, pero eso significa mostrar la lista completa de archivos de más de 10 MB (mi umbral inferior), ordenados por tamaño, en lugar de solo los superiores.

Entonces, ¿qué hace que awkel estrangulamiento sea parte de un comando con alias aquí (suponiendo que ese sea realmente el problema) y qué puedo hacer para solucionarlo?

Respuesta1

Cuando se utiliza este comando como alias, $0ya no está protegido por comillas simples, por lo que se convierte a su nombre de shell. Estos comandos lo demuestran:

$ alias F="echo '$0'"      
$ F
bash

El nombre del shell (presumiblemente bash) resulta ser un no configuradoawknombre de la variable, lo que lleva a las líneas vacías.

Una forma de protegerse $0de la expansión del shell sería usar algo como:

alias F="find -type f -size +1k -exec ls -gGsSh1 {} + | awk 'NR<=10 {print \$0}'"

Sin embargo, como esto $0es inútil, puedes eliminarlo del awkextracto.

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print}'

Puede ir más allá y eliminar todo el bloque, ya que imprimir la línea seleccionada es awkel comportamiento predeterminado de todos modos:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10'

Alternativamente, puedes seguir usando heady descartar el mensaje de error:

find -type f -size +10M -exec ls -gGsSh1 {} + 2>&1 | head

información relacionada