bsub < 여러 파일 찾기 및 실행

bsub < 여러 파일 찾기 및 실행

*.lsf현재 컨텐츠를 찾아 파일 찾기를 모두 /subdirectories수행할 계획입니다. bsub<*.lsf나는 시도했다:

find ./ -type f -name "*.lsf" -exec bsub < \;

이 부분은 find ./ -type f -name "*.lsf"잘 작동합니다. 그러나 구현에 문제가 있었습니다.

이 질문에 대답하는 데 도움을 줄 수 있는 사람이 있나요?

답변1

첫 번째 시도에서 거의 성공했습니다. 당신이 해야 할 일은 쉘을 호출하여 <리디렉션 연산자를 해결하는 것입니다.

find -name '*.lsf' -exec bash -c 'bsub <"$1"' _ {} \;

그러나 이제 일치하는 각 파일에 대해 셸을 시작하므로 이는 매우 효율적이지 않습니다. 가능한 한 적은 수의 셸 호출을 수행하고 루프를 사용하여 여러 파일을 한 번에 처리합니다.

find -name '*.lsf' -exec bash -c 'for i in "$@"; do bsub <"$i"; done' _ {} +

둘 다 파일 이름이 안전합니다(즉, 파일 이름에서 공백과 비인쇄/반인쇄 문자를 처리합니다).

답변2

다음과 같이 작업할 수 있습니다 xargs.

find ./ -type f -name "*.lsf" | xargs bsub

실제로 구멍을 다음과 같이 줄일 수 있습니다.

find *.lsf | xargs bsub

설명: 내가 사용하는 클러스터에서 테스트되었습니다.

편집: 문자열 바꾸기 옵션과 문자 리디렉션을 제거했습니다.

답변3

xargs효율적인 방법으로 활용해보세요. (@KamilMaciorowski가 말했듯이 이것은 안전하지 않습니다.)

find . -type f -iname "*.lsf" | xargs -I {} bash -c 'cat < {}'

그런 다음 파일 이름 공백 등을 수정하십시오.

find . -type f -iname "*.lsf" -print0 | xargs -0 -I {} bash -c 'cat < {}'

나는 그것을 테스트했습니다 cat. 당신은 당신의 명령으로 바꿔야합니다

관련 정보