파일을 찾고 해당 파일의 크기를 인쇄하려고 합니다.
# 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}" "{}"' \;
find
3개의 매개변수 가 주어지며 -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 코드를 열어 두었습니다. 따라서 어떤 파일이 크기를 가지고 있는지 파악해야 합니다)