find와 aspel을 함께 사용하기

find와 aspel을 함께 사용하기

현재 디렉터리의 모든 파일에 대한 맞춤법 검사를 시도하고 있지만 *.md다음 명령이 실패합니다.

>> find . -maxdepth 1 -name "*.md" | xargs -I {} aspell check {}
xargs: aspell: exited with status 255; aborting

나는 이것이 사용자 상호 작용이 aspell필요 stdin하지만 어떻게든 xargs제공되지 않기 때문이라고 가정합니다. 내가 하나 찾았어해커가 트위터를 공격하다,

find . -maxdepth 1 -name "*.md" | xargs -n 1 xterm -e aspell check

그러나 이것은 매번 새로운 xterm을 엽니다. find 명령만 실행한 결과처럼 원래 명령이 작동하도록 하려면 어떻게 해야 합니까 aspell?

답변1

  • xargs전혀 필요하지 않으며 exec옵션을 사용하십시오.

    find . -maxdepth 1 -name "*.md" -exec aspell check {} \;
    
  • 귀하 또는 미래의 독자가 사용해야 하는 경우를 대비하여 xargs새 셸을 생성하고 터미널( )에서 표준 입력을 가져와 /dev/tty이를 수행 할 수 있습니다.

    find . -maxdepth 1 -name "*.sh" | xargs -n1 sh -c 'aspell check "$@" < /dev/tty' aspell
    

답변2

언제든지 간단한 루프를 사용할 수 있습니다.

for f in *.md; do aspell check "$f"; done

답변3

동의합니다. xargswith를 사용하는 find것은 중복되지만 입력이 다른 것에서 나오는 경우가지다를 사용하려면 xargs다음을 사용하세요 -o.

grep -rl 'draft: false' | xargs -o -n1 aspell check --sug-mode=slow

man xargs그것은 말한다:

-o 명령을 실행하기 전에 하위 프로세스에서 /dev/tty로 stdin을 다시 엽니다. 이는 xargs가 대화형 응용 프로그램을 실행하도록 하려는 경우 유용합니다.

관련 정보