'ls -1': cómo enumerar nombres de archivos sin extensión

'ls -1': cómo enumerar nombres de archivos sin extensión

ls -1enumera mis elementos así:

foo.png
bar.png
foobar.png
...

Lo quiero en la lista sin lo .pngsiguiente:

foo
bar
foobar
...

(el directorio solo contiene .pngarchivos)

¿Alguien puede decirme cómo usarlo grepen este caso?

Propósito: Tengo un archivo de texto donde se enumeran todos los nombres sin la extensión. Quiero crear un script que compare el archivo de texto con la carpeta para ver qué archivo falta.

Respuesta1

ls -1 | sed -e 's/\.png$//'

El sedcomando elimina (es decir, reemplaza con la cadena vacía) cualquier cadena .pngencontrada en elfinde un nombre de archivo.

Se .escapa \.para que se interprete sedcomo un carácter literal .en lugar de la expresión regular .(lo que significa coincidir con cualquier carácter). Es $el ancla de final de línea, por lo que no coincide .pngen medio de un nombre de archivo.

Respuesta2

Sólo necesitas el shell para este trabajo.

POSIXly:

for f in *.png; do
    printf '%s\n' "${f%.png}"
done

Con zsh:

print -rl -- *.png(:r)

Respuesta3

Si solo quieres usar bash:

for i in *; do echo "${i%.png}"; done

Debe buscar coincidencias grepcuando intente encontrar coincidencias, no eliminar/sustituir lo que sedsea más apropiado:

find . -maxdepth 1 -name "*.png"  | sed 's/\.png$//'

Una vez que decida que necesita crear algunos subdirectorios para poner orden en sus archivos PNG, puede cambiarlos fácilmente a:

find . -name "*.png"  | sed 's/\.png$//'

Respuesta4

Otra respuesta muy similar (me sorprende que esta variante particular no haya aparecido todavía) es:

ls | sed -n 's/\.png$//p'
  • No necesita la -1opción ls, ya que lsse supone que si la salida estándar no es una terminal (es una tubería, en este caso).
  • la -nopción sedsignifica 'no imprimir la línea de forma predeterminada'
  • la /popción al final de la sustitución significa '...e imprimir esta línea si se realizó una sustitución'.

El efecto neto de esto es imprimir solo aquellas líneas que terminan en .png, con el .pngeliminado. Es decir, esto también atiende a la ligera generalización de la pregunta del OP, donde el directorio no contiene solo .pngarchivos.

La sed -ntécnica suele ser útil en casos en los que, de otro modo, podría utilizar grep+sed.

información relacionada