다음 줄을 사용하여 파일을 더 작은 부분으로 분할합니다.
split --line-bytes=100M -d $input $output/FILENAME
echo "$input was split into ??? 100MB files." >> demo.log
그런 다음 이 분할로 인해 생성된 작은 파일 수를 로그 파일에 기록해야 합니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
가장 간단한 방법은 결과 조각 이름을 다음과 같이 배열에 저장하는 것입니다.
splitarr=($output/FILENAME*)
을 사용하여 배열 길이(요소 수)를 가져옵니다 ${#splitarr[@]}
. 이는 패턴과 일치하는 유일한 파일 이름이 split
명령에 의해 생성된 파일 이름이라고 가정합니다.
사용하고 있는 것 같으 gnu split
므로 다른 방법도 있습니다. 옵션을 추가한 --verbose
다음(자세한 내용은 페이지 참조) man
인쇄된 줄 수를 세어 변수에 저장할 수 있습니다.split
stdout
ct=$(split --verbose --line-bytes=100M -d $input $output/FILENAME | wc -l)
덜 알려진 옵션을 사용하여 동일한 결과를 얻을 수 있습니다 --filter
.
ct=$(split --filter='printf %s\\n;cat >$FILE' --line-bytes=100M -d $input $output/FILENAME | wc -l)
split
또는 다음 몇 초 내에 사용자의 명령만 해당 디렉터리에 파일을 생성한다는 것을 알고 있는 경우 다음과 같이 이벤트에 대한 통계를 수집하는 N
데 사용할 수 있습니다 .inotifywatch
close_write
inotifywatch . -t 20 -e close_write
현재 디렉터리의 이벤트는 다음 20초 동안 모니터링되고 close_write
다음 출력이 출력됩니다.
Establishing watches...
Finished establishing watches, now collecting statistics.
total close_write filename
11 11 ./
따라서 테이블에서 해당 숫자를 추출하기만 하면 됩니다(예: 에 파이프 연결 awk 'END{print $2}'
; 또한 처음 두 줄이 에 인쇄된다는 점을 기억하세요 stderr
).