Pasar un archivo a $archivo

Imagen de ypsilon
0 puntos

Buenas tengo un pequeño kaos en mi cabeza, me explico... quiero leer x ficheros y con grep realizar una comprobacion de cada uno de ellos, estos estan contenidos en un directorio, pero para empezar no se como lo puedo hacer... os dejo lo unico que se me ocurre, pero con esto digamos que no avanzo...

#!/bin/bash
num_archivos=`ls -A | wc -l`
for $num_archivos
do
'como recupero el nombre del archivo para hacer el grep????
cat archivo | grep error
done

Imagen de cousteau
+1
0
-1

Lo que quieres hacer es

grep error -R .

grep también puede abrir archivos, no necesita que se le pasen con cat. Y además puede explorar directorios recursivamente (opción -R). Esto mostrará además el nombre del archivo en el que apareció "error".


En cuanto a tu código, lo que querías es algo como

for archivo in `ls -A`
do
    cat $archivo | grep error
done

Pero hay varias cosas que están mal:

  1. No se debe usar la salida de `ls`. Si uno de los archivos contiene espacio, la salida se interpretará incorrectamente. Mejor hacer algo como
    for archivo in  *  .*

    (habría que hacer algo con . y ..)

  2. No hace falta usar cat antes de grep. grep ya es capaz de abrir archivos:
    grep error "$archivo"
  3. Mejor que comillas invertidas, usa $(...), como en "$(date)". Los paréntesis se pueden anidar fácilmente, y aunque vayan dentro de una expresión entre comillas, lo de dentro de los paréntesis no va entre comillas, así que no necesitas nada raro para escribir algo como "$(echo "hola")".
  4. Pon siempre comillas dobles alrededor de variables y $(), por si contiene espacios (a menos que quieras que el resultado se divida en los espacios, como en el caso del for, pero eso es poco común).
+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.