GNU/Linux >> Tutoriales Linux >  >> Linux

AWK y nombres de archivo con espacio en él.

El problema aquí es analizar con ls . Considere echar un vistazo aquí:Por qué no debería analizar la salida de ls.

La razón por la que no debería hacerlo es porque UNIX permite casi cualquier carácter en un nombre de archivo, incluidos espacios en blanco, líneas nuevas, comas, símbolos de tubería y casi cualquier otra cosa que intente usar como delimitador, excepto NUL. En su modo predeterminado, si la salida estándar no es una terminal, ls separa los nombres de archivo con saltos de línea. Esto está bien hasta que tenga un archivo con una nueva línea en su nombre.


Dios mío, eso es horrible.

Su script usa bash; Te sugiero que hagas esto en su lugar:

#!/bin/bash
for i in *.wav; do mv "${i}" "${i%.wav}.ext"; done

Consulte la Guía de Bash para obtener más detalles sobre la expansión de parámetros.


Podrías probar esto.

awk '{print substr($0, index($0,$9))}'

Por ejemplo, esta es la salida del comando ls:

-rw-r--r--. 1 raíz raíz 73834496 6 de diciembre 10:55 Archivo con espacios 2

Si usas awk simple como este

# awk '{print $9}'

Solo regresa

# File

Si se usa con el comando completo

# awk '{print substr($0, index($0,$9))}'

Obtengo toda la salida

Archivo con espacios 2

Heresubstr(s, a, b) :devuelve un número b de caracteres de la cadena s, comenzando en la posición a. El parámetro b es opcional.

Por ejemplo, si la coincidencia es addr:192.168.1.133 y usa substr de la siguiente manera

# awk '{print substr($2,6)}'

Obtienes la IP, es decir, 192.168.1.133. Tenga en cuenta que el 6 es el carácter que comienza con una dirección in

Entonces, en el comando correcto, $ 2 es $ 0 (que imprime la línea completa) e index ($ 0, $ 9) coincide con $ 9 e imprime todo lo que está delante de la columna 9. Puede cambiar eso a index ($ 0, $ 8) y ver que la salida cambia a

# 10:55 File with spaces 2

`index(IN, FIND)' Esto busca en la cadena IN la primera aparición de la cadena FIND, y devuelve la posición en caracteres donde comienza esa aparición en la cadena IN.

Espero que ayude. Además, si está asignando este valor a una variable en el script, debe encerrar las variables entre comillas dobles. De lo contrario, obtendrá errores si está realizando alguna otra operación para el nombre del archivo extraído.


Linux
  1. Linux + ¿Cómo ignorar (filtrar) el archivo con espacio?

  2. ¿For Loop con nombres de archivo?

  3. Usuarios virtuales y dominios con Sendmail

  4. Encuentre un archivo con los comandos de búsqueda y localización en Linux

  5. ¿Reproducir un video con gstreamer y gst-launch?

Comando Linux Zip y Unzip con ejemplos

Explicación de Soft Link y Hard Link en Linux con ejemplos

Manipulación de texto con sed y grep

Cómo trabajar con File y Shell Provisioner en Vagrant

Administre directorios y permisos de archivos con chmod Recursive

¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)