find | xargs
은 공백이나 다른 비정상적인 문자가있는 파일 이름이 문제를 혼동시킬 수 있으므로 좋지 않은 아이디어입니다. 다행히도 find
에는 -execdir
이라는 플래그가 붙어 있습니다.
find -execdir ipython nbconvert {} \;
자세한 내용은 find manpage을 참조하십시오. 코멘트에 밖으로
@chepner으로 포인트를 잘 작성하지 find
의 모든 버전은 -execdir
기능을 지원합니다. 그렇지 않은 경우 출력이 개별 행에 있다는 사실을 활용하고 프로그램을 실행하기 전에 cd
을 적용하여 각 결과를 반복하는 while 루프를 만들 수 있습니다. 당신은 항상 첫 번째 인자의 디렉토리에 실행 않으려면
find | while read line; do
cd "$(dirname "$line")"
ipython nbconvert "$line"
done
는 또한, 파이썬 자체 내에서이 작업을 수행 할 수 있습니다. 당신이 sys.argv
대신 고급 옵션 파서 중 하나를 사용하는 경우, 당신은 당신의 파이썬 스크립트의 처음으로 이런 일을 추가 할 수 있습니다
if __name__ == '__main__':
import os
import os.path
import sys
os.chdir(os.path.dirname(sys.argv[1]))
당신은 또한 당신의 출력 파일에 대한 명시 적 경로를 지정할 수 있습니다 때를 open
with open(os.path.join(os.path.dirname(sys.argv[1]), 'name_of_output_file.txt') as fb:
pass # your code here
출처
2014-08-29 03:28:29
Dan
'-execdir'는 POSIX 표준의 일부가 아니므로'find '의 일부 버전에서는 지원하지 않을 수 있습니다. 그러나 GNU'find'와 Mac OS X (그리고 모든 BSDs)와 함께 제공되는 버전은 그렇습니다. – chepner