2011-04-26 2 views

답변

27

이렇게하면됩니다. 각 파일에 동일한 텍스트를 사용하면보다 효율적으로 작업을 수행 할 수 있습니다 ...

+0

일 .. 더 나은 솔루션을 추가합니다 :) – Cfreak

+9

모두'$ f'는' "$의 f"는'해야합니다. 오류 검사를하는 것도 좋습니다. 또한 원본 파일의 사용 권한 및 소유권도 변경합니다. – ikegami

0

이 트릭을 수행해야합니다.

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 

파일 크기가 매우 큰 경우 권장하지 않습니다.

+0

이것은'ls' 예제의 쓸모없는 사용입니다. 셸 확장을 사용하십시오. – ghostdog74

0

당신은뿐만 아니라이 작업을 수행 할 수 있습니다

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

그것은 1 일 이후 크게 다르지 않다하지만 temporay 파일을 만들 필요없이 파일로 '에코'문장의 출력을 처리하는 방법을 보여 않습니다 값을 저장합니다.

5

그리고 당신이 루프없이뿐만 아니라

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

당신은 이런 식으로 작업을 수행 할 수 있습니다 1 단일 명령에 나오지 사용하여이 작업을 수행 할 수 있으며, cat

sed -i '1i whatever' * 

백업 할 경우 파일을 사용하려면 -i.bak를 사용하십시오.

또는 awk

만약 당신이 좋아하면 0
awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' * 
+0

당신의 sed comman은 첫 번째 파일에만 문자열을 붙이는 것처럼 보입니다. – Raffael

+0

은 저의 매력처럼 작동했습니다. –

0

당신은 임시 파일없이 수행 할 ed 명령을 사용할 수 있습니다 :

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

이 내가 밖으로 일한 가장 쉬운 방법입니다.

sed -i '1s/^/Text

내보다 다음 새 file\n/' /file/to/change

관련 문제