2010-03-15 13 views

Respuesta

12
#!/bin/bash 
for file in *; do 
    echo "Copyright" > tempfile; 
    cat $file >> tempfile; 
    mv tempfile $file; 
done 

solución recursiva (encuentra todas .txt archivos en todos los subdirectorios):

#!/bin/bash 
for file in $(find . -type f -name \*.txt); do 
    echo "Copyright" > copyright-file.txt; 
    echo "" >> copyright-file.txt; 
    cat $file >> copyright-file.txt; 
    mv copyright-file.txt $file; 
done 

Tenga cuidado; si existen espacios en los nombres de los archivos, es posible que tenga un comportamiento inesperado.

+0

+1 Para su siguiente truco, Paul va a hacer en 5 bytes con 'perl -e ' –

+0

+1 ¡Agradable! Entrará en mi repositorio de herramientas. Me pregunto, ¿cómo podría uno hacer eso recursivo? –

+0

@Byron Whitlock: ¿por qué perl? sed haría muy bien –

0

Usted puede usar este script sencillo

#!/bin/bash 

# Usage: script.sh file 

cat copyright.tpl $1 > tmp 
mv $1 $1.tmp # optional 
mv tmp $1 

lista de archivos puede ser gestionado a través de utilidad Buscar

5

sed

echo "Copyright" > tempfile 
sed -i.bak "1i $(<tempfile)" file* 

o concha

#!/bin/bash 
shopt -s nullglob  
for file in *; do 
    if [ -f "$file" ];then 
    echo "Copyright" > tempfile 
    cat "$file" >> tempfile; 
    mv tempfile "$file"; 
    fi 
done 

hacerlo recursiva , si tienes bas h 4,0

#!/bin/bash 
shopt -s nullglob 
shopt -s globstar 
for file in /path/** 
do 
     if [ -f "$file" ];then 
     echo "Copyright" > tempfile 
     cat "$file" >> tempfile; 
     mv tempfile "$file"; 
     fi 
done 

o el uso de find

find /path -type f | while read -r file 
do 
    echo "Copyright" > tempfile 
    cat "$file" >> tempfile; 
    mv tempfile "$file"; 
done 
+0

muy bien hecho. Introdujo muchas técnicas aquí. Los estudiaré más tarde. gracias. –

0

Trabajando en Mac OS X:

#!/usr/bin/env bash 

for f in `find . -iname "*.ts"`; do # just for *.ts files 
    echo -e "/*\n * My Company \n *\n * Copyright © 2018 MyCompany. All rights reserved.\n *\n *\n */" > tmpfile 
    cat $f >> tmpfile 
    mv tmpfile $f 
done 
Cuestiones relacionadas