2012-07-27 2 views
4

:와일드 카드 확장은

list=$(ls /path/to/some/files/*/*/*.dat) 

는 그것을 잘 작동합니다. 하지만 제가 필요한 것은

files="files/*/*/*.dat" 
list=$(ls /path/to/some/${files}) 

이며

ls: /path/to/some/files/*/*/*.dat: No such file or directory 

내가 그것을 어떻게해야합니까라고?

+1

나를 위해 작동합니다 ... .dat 파일이 없을 때만 실패합니다. – sashang

+3

'$ list'로 무엇을 할 건가요? 'ls '의 출력을 파싱하는 것은 보통 올바른 접근 방식이 아닙니다. – choroba

+0

이 목록을 여러 개의 N 파일로 나눈 다음 클러스터의 여러 컴퓨터에서 작업 당 N 개의 입력 파일로 개별 작업을 시작해야합니다. – Morse

답변

4

이 시도 : 당신은 진정으로 일치 .dat 파일이 없는지 메시지가 나타나면

list=$(find /path/to/some/files/ -mindepth 3 -maxdepth 3 -name '*.dat') 
+3

찾기를 사용하는 것이 좋은 방법이지만, 공백이 있으면 파열되는 파일 이름 문자열을 만듭니다. – jordanm

+0

내 경우에는 특별한 기호가 없으므로 정상적으로 작동합니다. 감사. – Morse

10

, 스크립트에 이것을 추가 :

shopt -s nullglob 

그것은 글로브가 확장의 원인이됩니다 말 그대로 처리되는 것이 아니라 일치하는 파일이없는 경우 빈 목록.