*.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
. 당신은 당신의 명령으로 바꿔야합니다