파일을 찾고 해당 파일의 크기만 인쇄하려고 합니다.

파일을 찾고 해당 파일의 크기만 인쇄하려고 합니다.

파일을 찾고 해당 파일의 크기를 인쇄하려고 합니다.

# find . -name "*.req" -size +1000c -mtime +1 -exec 'awk "{print $5}" "{}"' \;

산출:

find: awk "{print $5}" "./l16696092.req": No such file or directory
find: awk "{print $5}" "./l16696113.req": No such file or directory
find: awk "{print $5}" "./l16696114.req": No such file or directory
find: awk "{print $5}" "./l16696099.req": No such file or directory
find: awk "{print $5}" "./l16696096.req": No such file or directory
find: awk "{print $5}" "./l16696116.req": No such file or directory
find: awk "{print $5}" "./l16696100.req": No such file or directory
find: awk "{print $5}" "./l16696117.req": No such file or directory

그런데 위 파일이 그 위치에 존재합니다.

# ls -lrt l16696092.req
-rw-r----- 1 applgrnt dba 1595 Sep  5 10:35 l16696092.req

답변1

다른 사람들은 이상한 오류의 원인인 파일 크기를 얻는 방법을 보여주었습니다.

작은따옴표 때문에 이 부분은

find ... -exec 'awk "{print $5}" "{}"' \;

find3개의 매개변수 가 주어지며 -exec, ;중간 매개변수에는 가 포함됩니다 awk "{print $5}" "{}". {}는 현재 파일 이름으로 대체 됩니다 . 예를 들어 ./l16696092.req결과 awk "{print $5}" "./l16696092.req"는 의 첫 번째 인수이므로 -exec실행할 명령의 이름으로 처리됩니다 .공백, 따옴표 및 모두. 따라서 오류가 발생했습니다.

find -exec외부 인용문이 없으면 더 잘 작동합니다.

find ... -exec awk '{print $5}' {} \;

그러나 이는 물론 크기를 가져오는 대신 awk발견된 파일(내용)을 읽기 위해 실행됩니다. find(쉘이 확장을 시도하지 않도록 작은따옴표나 백슬래시로 묶어야 합니다. $)$5

답변2

GNU 사용 find(1):

find . -name '*.req' -type f -size +1000c -mtime +1 -printf "%s\n"

BSD find(1)및 BSD 의 경우 stat(1):

find . -name '*.req' -type f -size +1000c -mtime +1 -exec stat -f %z {} +

답변3

find대신 인쇄 기능을 사용하십시오 .

 $ find . -name "*.req" -size +1000c -mtime +1 -printf "%s\n"

man find형식 지정자의 전체 목록은 참조를 참조하세요.

답변4

노력하다

find . -name "*.req" -size +1000c -mtime +1 -exec stat -c %s "{}" \;

또는 찾기를 사용하세요-ls

find . -name "*.req" -size +1000c -mtime +1 -ls | awk ' ... '

(이제 작동 방법을 알았으므로 awk 코드를 열어 두었습니다. 따라서 어떤 파일이 크기를 가지고 있는지 파악해야 합니다)

관련 정보