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"
' {} \;
작동 방식:
find
{}
일치하는 모든 파일로 교체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 소개 영상 보기더 알아보기.