0 votos

hallazgo de tuberías a la cabeza

Tengo un script para leer la primera línea de cualquier archivo de texto con una determinada extensión dentro de una determinada carpeta, de forma recursiva, pero no funciona. El comando head no funciona.

#!/bin/bash
while true; do
(find ~/SpaceMonkey/MATLAB/Luo-Rudy -name '*.m') | head –n 1 > /dev/null
sleep 300
done

¿Qué estoy haciendo mal?

3voto

Tony Williams Puntos 4903

La forma más fácil de hacer lo que pretende es utilizar find para correr head para ti.

Sustituya la línea de búsqueda existente por :

find ~/SpaceMonkey/MATLAB/Luo-Rudy -name '*.m' -exec head -n 1 '{}' \;

Esto ejecutará head para obtener la primera línea de cada archivo que coincida. Puede redirigir la salida simplemente añadiendo > destination al final del comando.

1voto

Shuft Puntos 420

Hay algunos problemas con tu script.

En primer lugar, está enviando la salida final de head a /dev/null así que no verás nada de la cabeza en absoluto.

En segundo lugar, no estás abriendo realmente los archivos, sólo estás pasando el lista de archivos encontrado por find en head Así pues, aunque se elimine el > /dev/null sólo verás el nombre del primer archivo. Si head lee desde stdin, trata a stdin como el 'archivo', no como una lista de archivos a procesar.

En cambio, querrás hacer algo más parecido a esto:

#!/bin/sh
DIR="$HOME/SpaceMonkey/MATLAB/Luo-Rudy"
while true
do
    for filename in $(find $DIR -name '*.m')
    do
        head -n 1 $filename
        # or if you want the filename listed too:
        #echo "$filename $(head -n 1 $filename)"
    done
    sleep 300
done

Tenga en cuenta también que si utilizó el zsh shell, podría conseguirlo de forma más sencilla:

head -n 1 $DIR/**/*.m

El zsh shell (y algunos otros) permite el globbing recursivo de archivos, para permitirle pasar todos los .m (recursivamente) a head como argumentos de la línea de comandos de una sola vez.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X