여러 파일에 줄 추가

여러 파일에 줄 추가

200,000개가 넘는 파일에 텍스트를 추가하고 싶습니다. 지금 하려고 합니다.

find . -name *.txt -print | xargs -I % echo "hello world" >> %

그러나 아무 일도 일어나지 않았습니다. 실행시키면 find . -name *.txt저절로 잘 되더라구요echo "hello world" >> myfile.txt

답변1

쉘은 보기 >> %전에 부품을 xargs확장하고 있습니다.

셸 리디렉션을 수행해야 하는 경우 다음을 시도해야 합니다.

find . -name "*.txt" -exec sh -c '
    echo "hello world" >> "$0"
    ' {} \;

작동 방식:

  1. find{}일치하는 모든 파일로 교체
  2. bash -c "some command" arg0...$0...스크립트 내부에서 설정"some command"

sed>>또는 예를 들어 의존하지 않는 명령을 사용할 수 있습니다 .

find . -name "*.txt" -exec sed -i -e '$a\
hello world' {} \;

인용하다:

답변2

시도한 원래 명령은 ...

find . -name *.txt -print | xargs -I % echo "hello world" >> %

로 변경해야 합니다.

find . -name "*.txt" | xargs -I {} sh -c "echo 'hello world' >> '{}' "

답변3

GNU Parallel을 사용하면 다음을 수행할 수 있습니다.

find . -name *.txt -print | parallel 'echo "hello world" >> {}'

다음과 같이 간단하게 GNU Parallel을 설치할 수 있습니다.

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

GNU Parallel 소개 영상 보기더 알아보기.

관련 정보