줄 번호와 날짜가 포함된 파일 나열

줄 번호와 날짜가 포함된 파일 나열

각 파일의 줄 수와 날짜를 표시하여 파일을 나열하고 싶습니다. 을 사용하여 행복하게 행 수를 얻을 수 있습니다 wc -l *. 문제가 아니다. 을 사용하여 날짜를 얻을 수 있습니다 ls -l.

이 두 명령을 결합하여 열에 단일 출력을 제공하는 방법이 있습니까?

답변1

이것은 find+ + 가 wc있는 것 입니다 date.

find . -maxdepth 1 -exec sh -c '[ -f "$0" ] && \
  printf "%6s\t\t%s\t%s\n" "$(wc -l<"$0")" "$(date -r "$0")" "$0"' {} \;

date -r예를 들어 대안 중 하나를 사용하는 것도 가능합니다 stat -c%y.

출력은 다음과 같습니다.

   394      Thu Oct 16 22:38:14 UTC 2014    ./.zshrc
     7      Thu Oct 30 11:19:01 UTC 2014    ./tmp.txt
     2      Thu Oct 30 06:02:00 UTC 2014    ./tmp2.txt
    40      Thu Oct 30 04:16:30 UTC 2014    ./pp.txt

이것을 시작점으로 사용하여 디렉터리와 모드를 매개 변수로 받아들이는 함수를 만들 수 있습니다.

myls () { find "$1" -maxdepth 1 -name "$2" -exec sh -c '[ -f "$0" ] && \
  printf "%6s \t\t%s\t%s\n" "$(wc -l<"$0")" "$(date -r "$0")" "$0"' {} \;; }

그러면 myls /tmp '*.png'의 이미지만 나열됩니다 /tmp(쉘이 전역 연산자를 확장하는 것을 방지하기 위해 패턴 주위에 작은따옴표를 참고하세요 *).

답변2

기반 솔루션이 find가장 우아해 보이지만 재미삼아 이 문제를 해결하는 다른 방법이 있습니다.

이는 출력을 sed& 정리한 다음 파일 이름을 조인 필드로 사용하여 출력에 결합합니다 .headwcjoinstat

pat="A*";join -1 2 -2 1 -t ' ' <(wc -l $pat|head -n-1|sed 's/^[ ]*//') <(stat -c '%n %y' $pat) | awk '{printf "%-20s %6s %s %s %s\n",$1,$2,$3,$4,$5}'

을 사용하여 열을 다시 정렬하고 파일 이름이 일치하는지 확인하는 paste더 쉬운 방법도 있습니다 .awk

pat="A*";paste -d ' ' <(wc -l $pat) <(stat -c '%n %y' $pat) | awk '$2==$3{printf "%6s %s %s %s\n", $1, $4, $5, $2}'

그러나 만약 이름이아니요일치(이 명령을 실행하면 파일 목록이 변경됨)하면 오류가 표시되지 않습니다. 하지만 이 버전에서는 오류가 보고됩니다.

pat="A*";paste -d ' ' <(wc -l $pat) <(stat -c '%n %y' $pat) | awk '$2==$3{printf "%6s %s %s %s\n", $1, $4, $5, $2;next};{print "Error:" $0}'

물론 마지막 줄에 오류 메시지가 인쇄되지만 수정하기 쉽습니다. 아니면 무시하세요. :)

답변3

내가 사용하는 것은 awk아래와 같습니다.

wc -l * | head --lines=-1 | while read num file
do
  echo -n $num" "
  ls -l $file | awk '{
     for (i=6; i <= NF; i++)
       printf $i " "
  }'
  echo
done
  • head마지막 행( wc출력의 총 행)을 삭제하는 데 사용됩니다.
  • num포함된 행 수입니다 file.
  • awk인쇄를 위한 ls -l시간 출력 .

답변4

무엇에 대해:

ls -lrth yourfile|awk '{print $6 $7 " " $8 system("wc -l " $9) }' | tr '\n' ' '

관련 정보