나는 많은 파일 목록을 처리하는 문제를 처리하는 방법을 찾으려고 노력하고 있습니다.
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