2017-10-23 4 views
0

파일 이름, 크기 및 유형을 3 열로 표시하려고합니다. 데이터가 올바르게 표시되지 않고 그 이유를 알 수 없습니다. (Linux) 변수를 열로 인쇄 printf


fileName=$(ls -a ~/dirname) 
    fileSize=$(find ~/dirname/* -printf '%s\n';) 
    fileType=$(find ~/dirname/* | xargs file | awk '{print $3}') 

    printf " ----------------------------------------------------------\n" 
    printf "%15s %15s %15s\n" "Name" "Size" "Type" 
    printf " ----------------------------------------------------------\n" 
    printf "%15s %15s %15s\n" "$fileName" "$fileSize" "$fileType" 
출력은 같은 보여주고있다 :

Output Screenshot

+0

각 변수에는 3 개의 파일에 대한 정보가 포함되어 있지만 하나의 파일처럼 취급합니다. – Barmar

+0

아. 나는 그것을 모두 보여줄 수 있다고 생각했다. 디렉토리의 각 파일에 대해 'for 루프'를 사용해야하고 한 번에 하나씩 인쇄해야합니까? – GavinMac

답변

0

:

당신은 파일 돌이 필요하고 다른 행에 각 하나를 인쇄

for fileName in $(ls -a ~/dirname/*); 
    do 
      fileSize=$(stat --printf="%s" "$fileName") 
      fileType=$(file "$fileName" | awk '{print $3}') 
      printf "%15s %15s %15s\n" $(basename "$fileName") "$fileSize" "$fileType" 
    done 
0

귀하의 변수 각 (이미지로 출력은 서식 stackoverflows을 피하기 위해) 여기

내 코드입니다 모든 파일에 대한 정보를 보유하고 있지만 한 번에 인쇄하고 있습니다. 그들을 분리하지 말라. 또한 find이 반환하는 파일의 순서는 ls과 같지 않습니다 (사전 식으로 정렬 됨). 내가 무슨 일을하고 있던 나는 Barmar가 식별로부터 약간의 도움으로 해결

printf "%15s %15s %15s\n" "Name" "Size" "Type" 
printf " ----------------------------------------------------------\n" 
ls -a ~/dirname | while read -r fileName 
do 
    fileSize=$(stat --format=%s "$fileName") 
    fileType=$(file "$fileName" | awk '{print $3}') 
    printf "%15s %15s %15s\n" "$fileName" "$fileSize" "$fileType" 
done 
+0

이것은 작동하지 않는 것 같습니다. % z은 (는) 오류를 제공합니다 : stat : '% z'에 대한 파일 시스템 정보를 읽을 수 없습니다 : 해당 파일이나 디렉토리가 없습니다. stat : 'test1'에 대한 파일 시스템 정보를 읽을 수 없습니다 : 아니오 그러한 파일 또는 디렉토리 이러한 파일이 존재하더라도. – GavinMac

+0

나는 for 루프를 사용했다. 고마워요. – GavinMac

+0

죄송합니다. Linux와 다른 OS X'stat' 명령을보고있었습니다. – Barmar