n개 파일 이후 많은 수의 파일 크기를 가져오지 못했습니다.

n개 파일 이후 많은 수의 파일 크기를 가져오지 못했습니다.

나는 많은 파일 목록을 처리하는 문제를 처리하는 방법을 찾으려고 노력하고 있습니다.

2000개가 넘는 파일 목록이 있습니다. ls 또는 wc를 사용하고 이를 루프에 넣어 각 파일의 파일 크기를 얻으려고 하면 n개 파일 후에 ls/wc가 실패합니다. 3~4개 파일마다 2초씩 일시정지하면 ls/wc가 작동하는 것 같습니다.

문제를 더욱 복잡하게 만들기 위해 rsh를 사용하여 원격 서버에서 실행하여 server1과 server2의 파일 크기를 비교할 수도 있었습니다. 그러나 rsh를 사용하지 않을 때 로컬에서 문제가 발생하지만 실패하기 전에 더 많은 파일 목록을 살펴봅니다.

server="xy1"
for CompareList in `cat compare_jnj.txt`
do
     rsh $server wc -c /u2/web/$CompareList.java |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
     rsh $server wc -c /u2/web/$CompareList.class |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
done

내 파일 목록은 파일 확장자가 없는 파일 위치/이름의 정적 목록입니다. 보안상의 이유로 내가 수행한 작업을 많이 제거했지만 다음은 내가 사용하고 있는 루프/명령을 보여줍니다.

결과 세트로 내보낼 파일 이름/크기를 얻기 위해 ls -l을 사용하여 편집한 후였습니다.

답변1

귀하의 스크립트가 파일 이름 목록을 얻기 위해 출력을 구문 분석 ls(또는 구문 분석) 하는 것 같습니다 . wc이렇게 하지 마십시오. 매우 나쁜 생각입니다.

파이프로 구분된 간단한 파일 이름 목록과 크기(바이트)를 얻으려면 다음을 사용할 수 있습니다.

stat -c '%n|%s' /path/to/directory/*

또는 디렉터리 트리를 구문 분석합니다.

find /path/to/directory -type f -exec stat -c '%n|%s' "{}" \;

답변2

다음은 파일과 해당 크기를 나열하기 위해 일반적으로 디렉터리 트리에 대해 실행하는 명령입니다.

find <directory>/* -type f -print0 | xargs -0 -n1 du -h

파일 크기별로 정렬할 수도 있습니다(작업에 유용하다고 생각합니다).

find <directory>/* -type f -print0 | xargs -0 -n1 du -h | sort -n -r

관련 정보