디렉터리에서 파일을 추출하고 파일 이름과 크기(KB 단위)를 CSV 파일에 저장합니다.

디렉터리에서 파일을 추출하고 파일 이름과 크기(KB 단위)를 CSV 파일에 저장합니다.

/var/log 디렉터리에서 모든 .log 파일을 검색하고 결과를 각 로그 파일의 해당 파일 크기(kB)와 함께 csv 파일에 저장하고 싶습니다.

먼저 find를 사용하여 파일을 가져옵니다.

find . -type f -name "*.log"

어떻게 파일로 저장할 수 있나요?

답변1

GNU 사용 find:

find . -name '*.log' -printf '%p,%s\n'

그러면 파일 이름과 파일 크기가 쉼표로 구분되어 바이트 단위로 인쇄됩니다. 파일의 기본 이름만 필요한 경우(즉, 경로 없음) %f대신 사용하세요.%p

킬로바이트(10^3 단위, "KB") 또는 킬로바이트(2^10 단위, "KiB")로 표시하려면 출력을 사후 처리해야 합니다. 바라보다du, ls1과 같이 바이트 수를 인간 KiB MiB 등으로 변환하는 표준 도구입니다.이를 수행하는 방법에는 여러 가지가 있습니다. 각 행의 두 번째 필드만 수정하려고 하므로 awkor를 사용하는 것이 가장 쉬울 것입니다.perl

답변2

이것이 최선의 추측이며 내 홈 디렉터리의 var-log.csv라는 파일에 내용을 넣었습니다.

find . -type f -name "*.log" -exec ls -s {} \; > ~/var-log.csv

답변3

이는 도움이 될 수 있습니다:

ls -l --block-size=K *.log | awk {'print $9","$5'} > nameSize.csv

답변4

ls -l은 필요한 모든 데이터와 그 이상을 제공합니다.

: ls -l /var/log/*.log
...
-rw-r--r-- 1 루트 루트 123456 7월 11일​​ 17:28 /var/log/xinetd.log
...

그런 다음 awk를 사용하여 필요한 필드를 추출할 수 있습니다.

: ls -l /var/log/*.log | awk '{print $5,$9}'
123456 /var/log/xinetd.log

다른 문자와 분리하려면 다음을 수행하세요.

: ls -l /var/log/*.log | awk '{print $5","$9}'
123456,/var/log/xinetd.log

관련 정보