2015-01-13 3 views
-1

디렉토리가되는 인수를 취하는 스크립트를 작성하고 있습니다.
나는 그 디렉토리에서 특정 확장자를 가진 모든 파일을 가지고 list/array를 구성하고 그 확장자를 자르고 자 할 수 있기를 원한다. * .XX를 검색bash 스크립트는 디렉토리에 파일을 나열합니다.

  • aaa.xx
  • bbb.yy
  • ccc.xx

메신저 예 : 제가 포함하는 디렉토리가있는 경우.
내 목록/배열은 다음과 같습니다. aaa ccc.
이 스레드의 코드를 사용하려고합니다. example 대답이 용납되었습니다. 나는이 스크립트를 실행하는 경우

set tests_list=[] 

for f in $1/*.bpt 
do 
    echo $f 
    if [[ ! -f "$f" ]] 
    then 
     continue 
    fi 
    set tmp=echo $f | cut -d"." -f1 
    #echo $tmp 
    tests_list+=$tmp               
done 

echo ${tests_list[@]} 

내가 루프는 $ f를 한 번 실행하는 얻을 수있다 tests_list = [] $ f를 그 디렉토리에있는 파일의 이름, 빈 에코해야하기 때문에 이상해/*. BPT 끈.
나는 올바른 디렉토리에 있고 인수 디렉토리에 .bpt 확장자를 가진 파일이 있는지 확인했습니다.

+0

[bash를 사용하여 디렉토리의 파일을 반복하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/20796200/how-to-iterate-over-files-in-directory-with-bash) – tripleee

+0

그것의 중복, 당신은 전체 질문을 읽었습니까? 파일 이름만으로 목록을 작성하고 모든 확장자를 잘라야합니다. –

답변

1
filear=($(find path/ -name "*\.xx")) 
filears=() 
for f in ${filear[@]}; do filears[${#filears[@]}]=${f%\.*}; done 
+0

일종의 일이지만 내 파일에 공백이 있으므로 echo $ {filears [1]}은 전체 파일 이름이 아닌 파일 이름에 단어를 인쇄합니다. –

+0

'$ {f % \. *}'는 $ f를 사용하는 파일을 제거하여 저장된 전체 파일 이름을 가져옵니다. 우주 문제에 대한 IFS = $ '\ n'또는 귀하의 필요에 맞는 것을 변경하십시오. –

2

이 당신을 위해 작동합니다 :

#!/bin/bash 

dir="$1" 
ext='xx' 

for file in "$dir"/*."$ext" 
do 
    echo "${file%.*}" 
done 

편집 :

for file in *.xx ; do echo "${file%.*}" ; done 

이 디렉토리로 인수를 취하는 스크립트에이를 확장하려면 forls 전환 - 감사합니다 @ 보정을위한 삼중 항.

+0

'ls'은 [쓸데없는] (http://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat) 또는 [최악의 경우] (http://mywiki.wooledge.org/ParsingLs)입니다. 당신은'.xx' 파일을 의미하고''$ dir "/*."$ ext"''.ext''에있는 파일을 위해 * .xx'에있는 파일에 대해서 – tripleee

+0

'은 공백으로 파일 이름을 나눌 것입니다. 그래서 나는 그렇지 않습니다. 당신의 제안 중 하나를 의미합니다. 그러나 나는'find'가 더 좋을 것이라고 말하고 싶습니다. 또한, 고양이의 쓸모없는 사용과 관련이 있습니다. 관련성은 무엇입니까? .. – pgl

+0

그건 완전히 잘못되었습니다. 일치하는 파일 이름을 하나씩 반복합니다. 문제가 발생하면''$ file ''을 루프 내에서 적절하게 인용하지 못하기 때문에 (=하지만 예제에서는 적절한 인용 부호가 사용됩니다). – tripleee

관련 문제