wc를 통해 jar 파일의 문자 수를 계산하는 방법

wc를 통해 jar 파일의 문자 수를 계산하는 방법

폴더에는 /usr/hdp/2.6.4.0-91/tez_hive2/lib/ 다음과 같은 .jar 파일이 있습니다.

$ ls  /usr/hdp/2.6.4.0-91/tez_hive2/lib/ | grep ".jar"
async-http-client-1.8.16.jar
azure-data-lake-store-sdk-2.1.4.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.2.jar
commons-collections4-4.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-math3-3.1.1.jar
guava-11.0.2.jar
hadoop-aws-2.7.3.2.6.4.0-91.jar
hadoop-azure-2.7.3.2.6.4.0-91.jar
hadoop-azure-datalake-2.7.3.2.6.4.0-91.jar
hadoop-mapreduce-client-common-2.7.3.2.6.4.0-91.jar
hadoop-mapreduce-client-core-2.7.3.2.6.4.0-91.jar
hadoop-yarn-server-timeline-pluginstorage-2.7.3.2.6.4.0-91.jar
jersey-client-1.9.jar
jersey-json-1.9.jar
jettison-1.3.4.jar
jetty-6.1.26.hwx.jar
jetty-util-6.1.26.hwx.jar
jsr305-3.0.0.jar
metrics-core-3.1.0.jar
protobuf-java-2.5.0.jar
RoaringBitmap-0.4.9.jar
servlet-api-2.5.jar
slf4j-api-1.7.10.jar

.jar 파일의 모든 문자 수를 계산하고 싶습니다.화장실, .jar 파일의 이름이 바뀌었는지 확인하기 위해

그래서 다음 명령을 실행하여 모든 .jar 파일의 모든 문자 수를 계산합니다.

ls  /usr/hdp/2.6.4.0-91/tez_hive2/lib/ | grep ".jar" | sed s'/\// /g' | awk '{print $NF}' | wc | awk '{print $NF}'
758

따라서 이 경우 모든 문자에서 758자를 얻습니다..jars

그러나 명령은 우아하지 않습니다

어떻게 하면 연출을 더 잘할 수 있나요?

답변1

파일 이름의 문자 수를 세는 것은 이름이 바뀐 파일 이름을 감지하는 안전한 방법이 아닙니다.

대신 간단한 이름 목록 파일을 만들고 이를 기존 목록과 비교하십시오. 를 사용하면 diff목록에서 어떤 행이 변경되었는지 정확하게 표시됩니다.

#!/bin/sh

LC_ALL=C

newlist=$HOME/filelist.new
oldlist=$HOME/filelist.old

echo /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar >"$newlist"

if [ -f "$oldlist" ]; then
    diff -u "$oldlist" "$newlist"
fi

mv "$newlist" "$oldlist"

분명히 이 작업을 처음 수행하면 filelist.old존재하지 않으므로 diff실행되지 않습니다.

출력 파일에 각 파일의 전체 경로를 저장합니다. 디렉터리 경로가 정적이므로 이는 중요하지 않습니다.

타임스탬프 등도 비교하려면 echo로 변경하세요. 더 많은 메타데이터를 비교하려면 이를 다음으로 변경하세요(파일의 마지막 액세스 타임스탬프가 변경되면 차등 출력이 생성됨). 줄 기반 diff 대신 단어 기반 diff를 얻도록 설치 및 변경되었습니다.ls -lstatwdiffdiffwdiff

이는 LC_ALL=C쉘 글로브 확장의 일관된 순서를 보장하기 위한 것입니다.

답변2

가장 많이 찾고 계시는

basename -a /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar | wc -c

와일드카드가 있는 경로는 모든 jar 파일, basename명령 스트립 디렉터리( -a많은 매개 변수를 허용해야 함)를 나열하고 wc -c바이트만 계산합니다(일부 파일 이름이 2바이트 문자로 구성된 경우 wc -m(문자 수)가 더 나은 선택일 수 있음).

그러나 목표가 파일이 수정되었는지 확인하는 것이라면 아마도 stat(수정 시간 동안) 또는 md5sum/ shasum체크섬이 더 나은 도구가 될 것입니다.

답변3

(숨겨지지 않은) 파일 이름의 문자 수를 얻으려면 jar다음을 수행합니다.

cd /usr/hdp/2.6.4.0-91/tez_hive2/lib/ && printf %s *.jar | wc -m

이것은 줄 바꿈을 계산하지 않고 파일 이름 문자만 계산합니다( 문자 수 대신 wc -m바이트 수를 대체).wc -c

일부러 난 안 그러는데ls출력 구문 분석.

답변4

이 명령의 의미를 이해할 수 없습니다 sed. 슬래시를 공백으로 바꾸시겠습니까? 왜?

그 외에도 .jar 파일의 모든 파일 이름에 있는 총 문자 수를 계산하려는 것 같습니다. 그렇다면 다음을 시도해 보십시오.
ls /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar | sed s'/// /g' | wc -c

sed 명령에 대한 두 가지 다른 가능성: --
sed "s|/| |g"또는 --tr '/' ' '
엘에스이 명령은 디렉터리 이름을 표시하지 않습니다. 필요한지 잘 모르겠습니다.
또한 각 파일 이름 끝에 있는 LF도 계산합니다. 괜찮나요?

관련 정보