find -exec가 쉘 스크립트를 호출하도록 만드는 방법은 무엇입니까?

find -exec가 쉘 스크립트를 호출하도록 만드는 방법은 무엇입니까?

마지막 답변(im3r3k)에서 가져옴:전체 디렉토리 트리를 재귀적으로 파쇄하는 방법은 무엇입니까?

find아래 설명된 대로 쉘 스크립트를 호출하는 명령을 얻으려고 합니다 .

내가 지금까지 시도한 것 :

find /home/shredtest/* -depth -exec /home/test.sh {}\;

/home/shredtest내용을 파쇄하고 싶은 디렉터리는 어디에 있고( /home/shredtest자체는 삭제하지 않음), /home/test.sh실행하려는 스크립트는 어디에 있습니까 chmod +x /home/test.sh?

위 명령은 find다음을 반환합니다.

찾기: -exec CMD는 ';'으로 끝나야 합니다.

나는 또한 다음을 시도했습니다.

find /home/shredtest/* -depth -exec /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec /home/test.sh {}\;
find /home/shredtest/* -depth -exec sh /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh {}\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh "{}"\;

이들 모두 동일한 오류를 반환합니다.

그래서:

  1. -exec세미콜론이 보이지 않나요? 분명 거기 있었다가 탈출한 걸로 봐서 다른 데 문제가 있는 게 틀림없어요. 나는 그것을 보지 못한다.
  2. 나는 이것을 올바른 방향으로 진행하고 있습니까, 아니면 이것을 달성하는 더 좋은 방법이 있습니까?

답변1

;별도의 인수 여야 합니다 find.

find /home/shredtest/ -depth -exec /home/test.sh "{}" \;

( {}와 사이의 공백 에 유의하십시오 \;). 뒤쪽에 -exec:

find에 대한 다음 인수는 모두 ";"로 구성된 인수가 나타날 때까지 명령에 대한 인수로 처리됩니다.

(에서man find). 즉, 인수에는 다음이 포함되어야 합니다.완전히매개변수 목록을 중지합니다 ;.

또한 "+"를 사용하여 여러 파일 매개변수를 한 번에 전달할 수도 있습니다. 이 매개변수도 자체 매개변수여야 합니다.


또한 in은 불필요 find /home/shredtest/*합니다 *. find디렉토리 내용 자체는 *쉘에 의해 탐색되고 확장됩니다(때때로 원하는 결과를 정확히 제공하지 못할 수도 있음).

관련 정보