2011-10-12 7 views
2
#!/bin/bash 
FILES=src/*.erl 
shopt -s nullglob 
for f in $FILES 
do 
    echo "Processing $f file..." 
# ??? 
done 

전체 경로에서 파일 이름을 어떻게 추출 할 수 있습니까? 그리고 "pathfilename = $ {f %. *}"은 무엇을 의미합니까?전체 파일 이름에서 파일 이름 추출

+1

glob'*'..을 사용하기 전에'shopt -s nullglob'를 넣어야합니다. 파일의 glob-list를 변수에 저장하고 그 변수를 사용할 필요는 없습니다. 고리. 당신은 간단하게 (그리고 더 효율적으로)'for f in src/*. erl'을 사용할 수있다. –

답변

5

예와 모든 것이 있으므로 도움말 출력 만 복사합니다.

~$ basename --help 
Usage: basename NAME [SUFFIX] 
    or: basename OPTION 
Print NAME with any leading directory components removed. 
If specified, also remove a trailing SUFFIX. 

     --help  display this help and exit 
     --version output version information and exit 

Examples: 
    basename /usr/bin/sort  Output "sort". 
    basename include/stdio.h .h Output "stdio". 
2

업데이트 : 질문 내용을 오해 한 것이므로 처음 부분에 대한 내 대답을 삭제했습니다.

당신이 pathfilename=${f%.*}을 언급 구문은, pathfilename은 문자열의 끝에서 제거 .*에 대한 짧은 경기와 $f의 값으로 설정되어 있음을 의미한다. 이렇게하면 파일 이름에서 확장자가 제거됩니다. bash manual describes this syntax as follows :

$ {매개 변수 % 단어}

$ {매개 변수 %% 단어}

제거 일치하는 접미사 패턴. pathname 확장과 마찬가지로 패턴이 생성되도록 단어가 확장됩니다. 패턴이 매개 변수의 확장 된 값의 후행 부분과 일치하는 경우 확장 결과는 가장 짧은 패턴 ("%"대/소문자) 또는 가장 긴 일치 패턴 ("%%"대/소문자)이있는 매개 변수의 확장 된 값입니다)가 삭제되었습니다. 매개 변수가 @ 또는 *이면 패턴 제거 작업이 각 위치 매개 변수에 차례로 적용되고 확장은 결과 목록입니다. 매개 변수가 @ 또는 *로 첨자 된 배열 변수 인 경우 패턴 제거 작업이 배열의 각 멤버에 차례로 적용되고 확장은 결과 목록입니다.

+0

10x, 유용한 링크를 위해 – Yola

관련 문제