2013-07-20 5 views
2

SBCL (디렉토리 "*")은 확장자에 따라 일부 파일 이름을 필터링합니다. 일부 파일을 나열 모든 (디렉토리 "을 MyFile"); 나는 그것이sbcl (디렉토리 "*")이 모든 파일을 반환하지 않음 (예 : * .lisp 누락)

(디렉토리 "*") (bash는 globing 같이) 모든 파일 또는 패턴과 일치하는, 특히 모든 파일을 반환하는 방법을 어떻게해야합니까 ; 일부 파일을 나열하지만, ​​확장자로 필터링하십시오.

적어도 무시하고있는 확장 기능 ... 적어도 * .lisp은 나열되지 않습니다. Fedora18

SBCL 1.1.2-1.fc18는
+0

[여기] (http://clhs.lisp.se/Body/f_tr_pn.htm) 많은 예제 + 설명. 그러나 결론적으로이 동작은 구현에 따라 정의되는 것이 중요합니다. 따라서 대부분의 구현이 동일한 작업을 수행하지만 변형이있을 수 있습니다. 유닉스 경로명을 가지고 작업 할 때 점이나 슬래시로 시작하여 필자가 의도 한대로 해석되도록해야한다. 그래서 저는'./*'또는'/ *'중 하나를 시작해서 거기에서 일할 것입니다. –

답변

2

globs에서 pathnames 로의 변환은 구현 및 시스템에 따라 다릅니다. 경로 이름은 파일 이름이이고 파일 유형이 (확장자)입니다. * 만 지정하면 Linux에서 SBCL은이를 "모든 파일 이름이지만 확장자는 비어 있어야합니다"로 해석합니다. *.*이라고 말하면 모두 개의 파일을 지정할 수 있습니다. *.*.은 파일 이름과 확장자 사이의 구분으로 해석되므로 *.*이 아니며이 아니라 리터럴 점이 포함 된 파일 이름입니다.

1

리스프는 경로를 사용하고 그들은 .XXX 파일의 종류를 호출합니다. 는 (디렉토리는 "") (나는 아직도 모든 것을 이해하지 못하는) 일부 "유형"필터링되어, 하지만 freenode.net IRC 사용자 PJB

(concatenate 'list (directory "*.*") (directory "*") (directory "*/")) 

을 지적하고 더 나은 않습니다. (아직 완벽하지만 무난하고 올바른 방향으로 가리키는되지 않음)

+1

'(concatenate 'list ...)'는'(append ...)'와 같지만, 두 번째는 더 관용적 인 것으로 보인다. –

4

는 기본 양식을 사용합니다 수 있음 : 코드의 이해 가능성을 증가시키지 않는 *?.*이 모든 이상한 징후로

(directory (make-pathname :name :wild :type :wild)) 

. Lisp은 one-liners 언어가되어서는 안된다. :)

그러나 디렉토리의 모든 파일을 나열하려면 cl-fad 기능 list-directory을 사용할 수 있습니다.