왜 작동하지 않습니까?디렉토리의 모든 파일을 소싱하는 방법은 무엇입니까?
find . -maxdepth 1 -type f -print0 | xargs -0 .
나는 모두 xargs: .: Permission denied
입니다.
왜 작동하지 않습니까?디렉토리의 모든 파일을 소싱하는 방법은 무엇입니까?
find . -maxdepth 1 -type f -print0 | xargs -0 .
나는 모두 xargs: .: Permission denied
입니다.
. file
을 실행하면 .
내장 쉘을 호출합니다. xargs
변형이 현재 디렉토리를 실행하려고합니다.
내장 명령을 호출하더라도 명령은 하위 쉘에서 실행되므로 모든 "소싱"은 쓸모가 없습니다.
사용 쉘 대체 (globbing)과 그것을위한 루프 : 경우에
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
하지만 당신이 그것의 재미 다음과 같은 솔루션에 대한 몇 가지 bash는-FU에 관심 원래 find
명령에 따라,도 작동합니다
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
는 우를 구성하는 -exec
와 함께 사용 발견 된 각 파일에 대한 rcing 명령. . './foo';
. 특수 문자가있는 파일 이름을 확인하려면 이스케이프 처리 된 작은 따옴표를주의하십시오. 제대로 처리됩니다.find
은 새 라인으로 구분 된 소싱 명령 목록을 반환합니다. 명령 대체 ($()
) 을 사용하여 큰 따옴표없이 큰 따옴표를 붙이면 셸은 각 줄을 구분 기호로 사용하여이 줄을 한 줄로 접습니다.eval
은 현재 쉘 (OS X 10.8.1에서 확인)의 컨텍스트에서 소싱 명령의 전체 목록을 실행합니다.참고 :이 해결 방법의 잠재적 인 문제는 명령 문자열이 많은 파일 및/또는 긴 파일 이름이있는 커다란 크기로 나타날 수 있다는 것입니다.
설명 주셔서 감사합니다! –
깨끗한 용액; 'xargs' (그리고'find'' -exec' primary)와 함께 내장 함수를 사용할 수 없다는 것을 알기 쉽습니다. 다음은 동등한 한줄짜리 모음입니다. do [[-f "$ f"]] &&. "$ f"; done' – mklement0