2011-04-26 15 views

Respuesta

27

Esto hará eso. Puede hacerlo más eficiente si está haciendo el mismo texto en cada archivo ...

for f in *; do 
    echo "whatever" > tmpfile 
    cat $f >> tmpfile 
    mv tmpfile $f 
done 
+0

1 .. solución mejor que la mía :) – Cfreak

+9

Tanto '$ F' debería ser' "$ f" '. Sería bueno hacer algunos errores también. Además, cambia los permisos y la propiedad del archivo original. – ikegami

0

Esto debería hacer el truco.

FOLDER='path/to/your/folder' 
TEXT='Text to prepend' 
cd $FOLDER 
for i in `ls -1 $FOLDER`; do 
    CONTENTS=`cat $i` 
    echo $TEXT > $i # use echo -n if you want the append to be on the same line 
    echo $CONTENTS >> $i 
done 

No recomendaría hacer esto si sus archivos son muy grandes.

+0

este es un uso inútil del ejemplo 'ls'. Use expansión de shell – ghostdog74

0

Puede hacerlo así:

for f in *; do 
    cat <(echo "someline") $f > tempfile 
    mv tempfile $f 
done 

No es muy diferente de la primera entrada, pero sí muestra cómo tratar a la salida de la sentencia 'eco' como un archivo sin tener que crear un archivo temporay para almacenar el valor

5

Y usted puede hacer esto con sed en 1 solo comando así

for f in *; do 
    sed -i.bak '1i\ 
    foo-bar 
    ' ${f} 
done 
18

Puede hacerlo de esta manera, sin un bucle y cat

sed -i '1i whatever' * 

si desea una copia de seguridad sus archivos, use -i.bak

O usando awk

awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' * 
+0

tu sed comman parece anteponer la cadena solo al primer archivo – Raffael

+0

funcionó como un amuleto para mí –

0

Usted puede usar el comando ed prescindir de archivos temporales si te gusta:

for file in *; do 
    (test ! -f "${file}" || test ! -w "${file}") && continue    # sort out non-files and non-writable files 
    if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi # sort out binary files 
    printf '\n%s\n\n' "FILE: ${file}" 
    # cf. http://wiki.bash-hackers.org/howto/edit-ed 
    printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}" # dry run (just prints to stdout) 
    #printf '%s\n' H 0a "foobar" . wq | ed -s "${file}"  # in-place file edit without any backup 
done | less 
0

Esta es la más fácil que he trabajado.

sed -i '1s/^/Text para añadir a continuación la nueva file\n/' /file/to/change

Cuestiones relacionadas