2010-04-20 2 views
0

앱의 모든 코드가 포함 된 파일을 만들려고합니다. catlist.txt라는 파일을 만들어 필요한 순서대로 파일을 추가합니다.고양이 파일을 시도하는 중 인식 할 수없는 와일드 카드

내 catlist.txt의 조각 :

app/controllers/application_controller.rb 
app/views/layouts/* 

app/models/account.rb 
app/controllers/accounts_controller.rb 
app/views/accounts/* 

내가 명시 적으로 나와있는 파일이 추가됩니다 명령을 실행하지만 와일드 카드 파일이 없을 때.

cat catlist.txt|xargs cat > fullcode 

나는 사람이 나를 도와 줄 수

cat: app/views/layouts/*: No such file or directory 
cat: app/views/accounts/*: No such file or directory 

를 얻을. 더 쉬운 방법이 있다면 나는 모든 제안에 개방적이다.

바브

답변

1

문제는 xargs가 셸이 아니기 때문에 와일드 카드가 문자 그대로 별표로 해석된다는 것입니다. 다음과 같이 확장을 수행하려면 셸이 있어야합니다.

cat catlist.txt | xargs -I % sh -c "cat %" > fullcode 

*는 데이터 파일에서 재귀가 아닙니다. 나는 그것이 당신이 의미하는 것이라고 생각합니다. 항목을 재귀 적으로 사용하려면 DevNull의 스크립트와 같이 좀 더 까다 롭고 더 많은 것이 필요 하겠지만 별을 포함하지 않기 위해 데이터 파일을 약간 변경해야합니다. 잠시 루프를 읽을

+0

가 완벽하게 작동 해 주셔서 감사합니다 파일 읽기! – Barb

0

그 디렉토리가 긍정적입니까?

와일드 카드를 사용하는 곳에서 고양이를 사용하는 문제는 고양이가 재귀가 아니라는 것입니다. 해당 디렉토리의 내용 만 나열합니다. 하위 디렉토리가 아닙니다.

는 여기에 내가 무엇을 할 것이라고입니다 :

#!/bin/bash.exe 

output="out.txt" 

if [ -f "$output" ] 
then 
    rm $output 
fi 

for file in $(cat catlist.txt) 
do 
    if [ -f "$file" ] 
    then 
     echo "$file is a file." 
     cat $file >> $output 
    elif [ -d "$file" ] 
    then 
     echo "$file is a directory." 
     find $file -type f -exec cat {} >> $output \; 
    else 
     echo "huh?" 
    fi 
done 

나열된 항목이 디렉토리 인 경우, 그에 포인트와 고양이 그들로부터 모든 파일을 찾습니다.

0

사용

while read -r file 
do 
    if [ -f "$file" ]; then 
    yourcode "$file" 
    fi  
    # expand asterix 
    case "$file" in 
    *"*") 
     for f in $file 
     do 
      yourcode "$f" 
     done 
    esac 
done <"catlist.txt"