2013-07-08 2 views
1

파일 이름의 파일이 있고 bash를 사용하여이 파일의 크기를 가져올 수 있어야합니다. 다음과 같은 스크립트가 있지만 파일 이름과 크기가 다른 줄에 인쇄되므로 가능하면 한 줄로 모두 인쇄하는 것이 좋습니다.bash의 변수에 stat | grep | awk를 할당하십시오.

#!/bin/sh 
filename="$1" 
while read -r line 
do 
    name=$line 
    vars=(`echo $name | tr '.' ' '`) 
    echo $name 
    stat -x $name | grep Size: | awk '{ print $2 }' 
done < "$filename" 

I의 형식을 가지고 싶어요 :

filename: $size 

내가 어떻게 할 수 있습니까? 는 (I, 따라서 합계의 약간 이상한 OSX 버전을 사용하고있다.)

+1

쇼 우리는 "filename"의 내용을 샘플로 제공합니다. 당신이 신경 쓰는 "filename"의 내용에 대해 "stat -x $ name"의 샘플 출력과 샘플 입력이 주어지면 스크립트가 생성하게 될 최종 결과물. –

+0

여기서'vars = (...) '의 결과를 사용합니다. 그게 당신의 질문에 있어야합니까? 행운을 빕니다. – shellter

답변

0
echo $name: $(stat -x $name | sed -n '/^Size:/s///p') 
+0

이것은 작동하지 않으며 $ (stuff | stuff)를 수행 할 수 없습니다. 그것은 나에게 아무것도주지 않는다. – KevinShaffer

1

패스 -necho 첨가되는 후행 개행을 방지 할 수있다. 그래서

echo -n $name 

echo $name 

을 변경하고이 트릭해야

echo -n ${name}": " 
0

파일 이름과 파일 크기 사이의 : 구분 기호를 추가 :

while read f 
do 
    echo "${f} : $(stat -L -c %s ${f})" 
done < "${filename}" 
+0

-c 명령은 Mac OSX 터미널에서 작동하지 않습니다. – KevinShaffer

+0

[stats에 대한 bsd 맨 페이지] (http://www.freebsd.org/cgi/man.cgi?query=stat)를 검사하고있었습니다.'stat -f "% N : % z" "$ f ". while 루프는'xargs stat -f "% N : % z"<$ filename "' –

+0

@KevinShaffer로 단축 할 수 있습니다.이 경우'stat -L -f % z $ {f}'... 또는 @glennjackman이 'echo'또는/또는 loop를 사용하지 않는 대안을 제안했습니다. – twalberg

관련 문제