다음과 같이 find 명령을 실행하면
$ find . -name *.ear
다음을 인쇄합니다.
./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear
명령 줄에 '인쇄'하고 싶은 것은 이름과 크기입니다.
./dir1/dir2/earFile1.ear 5000 KB
./dir1/dir2/earFile2.ear 5400 KB
./dir1/dir3/earFile1.ear 5400 KB
find . -name '*.ear' -exec ls -lh {} \;
jer.drab.org의 답변에서 여분의 h. 정신적으로 MB로 변환하는 시간을 절약합니다.)
-exec 또는 -printf를 사용해야합니다. Printf는 다음과 같이 작동합니다.
find . -name *.ear -printf "%p %k KB\n"
-exec는 더 강력하고 임의의 명령을 실행할 수 있습니다. 따라서 'ls'또는 'wc'버전을 사용하여 다른 정보와 함께 파일 이름을 인쇄 할 수 있습니다. 'man find'는 printf에 사용할 수있는 인수를 보여줍니다.
[edit] -printf는 공식 POSIX 표준이 아니므로 사용중인 버전에서 지원되는지 확인하십시오. 그러나 대부분의 최신 시스템은 GNU 찾기 또는 유사하게 확장 된 버전을 사용하므로 구현 될 가능성이 높습니다.
간단한 해결책은 find에서 -ls 옵션을 사용하는 것입니다.
find . -name \*.ear -ls
일반적인 "ls -l"형식으로 각 항목을 제공합니다. 또는 찾고있는 특정 출력을 얻으려면 다음과 같이하십시오.
find . -name \*.ear -printf "%p\t%k KB\n"
파일 이름 뒤에 KB 크기가 표시됩니다.
Gnu find를 사용하면 이것이 당신이 원하는 것이라고 생각합니다. 디렉토리가 아닌 모든 실제 파일을 찾고 (유형 f) 각각에 대해 파일 이름 (% p), 탭 (\ t), 크기 (KB) (% k), 접미사 "KB"를 인쇄 한 다음 줄 바꿈 (\ n).
find . -type f -printf '%p\t%k KB\n'
Printf 명령이 원하는 형식을 지정하지 않으면 exec를 사용하고 각 파일에서 실행할 명령을 사용할 수 있습니다. 파일 이름으로 {}를 사용하고 세미콜론 (;)으로 명령을 종료하십시오. 대부분의 쉘에서이 세 문자는 모두 백 슬래시로 이스케이프되어야합니다.
다음은 "ls -lh"를 사용하여 파일을 찾아 인쇄하는 간단한 솔루션입니다. 사람이 읽을 수있는 형식 (k는 킬로바이트, M은 메가 바이트)으로 표시됩니다.
find . -type f -exec ls -lh \{\} \;
또 다른 대안으로, "wc -c"는 파일의 문자 수 (바이트)를 인쇄합니다.
find . -type f -exec wc -c \{\} \;
find . -name '*.ear' -exec du -h {} \;
이것은 모든 불필요한 것들 대신 파일 크기만을 제공합니다.
du -a를 사용하지 않는 이유는 무엇입니까? 예 :.
find . -name "*.ear" -exec du -a {} \;
Mac에서 작동
Awk는 질문자가 요구 한 것을 제공하기 위해 출력을 수정할 수 있습니다. 내 Solaris 10 시스템에서 find -ls는 두 번째 필드로 KB 단위로 크기를 인쇄합니다.
% find . -name '*.ear' -ls | awk '{print $2, $11}'
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir2/earFile3.ear
5400 ./dir1/dir2/earFile1.ear
그렇지 않으면 -exec ls -lh를 사용하고 출력에서 크기 필드를 선택하십시오. Solaris 10에서 다시 :
% find . -name '*.ear' -exec ls -lh {} \; | awk '{print $5, $9}'
5.3M ./dir1/dir2/earFile2.ear
5.3M ./dir1/dir2/earFile3.ear
5.3M ./dir1/dir2/earFile1.ear
Find 명령이 -printf
를 지원하지 않는 Mac OS X에서이 문제로 어려움을 겪었습니다.
내가 찾은 해결책은 분명히 '스태프'인 모든 파일에 대해 '그룹'에 의존한다는 것입니다 ...
ls -l -R | sed 's/\(.*\)staff *\([0-9]*\)..............\(.*\)/\2 \3/'
이것은 긴 출력을 세 개의 토큰으로 나눕니다.
그리고 토큰 2와 3을 출력합니다. 즉, 출력은 바이트 수입니다.
8071 sections.php
54681 services.php
37961 style.css
13260 thumb.php
70951 workshops.php
이것은 당신이 찾고있는 것을 얻을 것입니다. 포맷이 포함되어 있습니다 (즉, 먼저 파일 이름과 크기).
find . -type f -iname "*.ear" -exec du -ah {} \; | awk '{print $2"\t", $1}'
샘플 출력 (여기서 -iname "*.php"
(결과를 얻으려면) :
./plugins/bat/class.bat.inc.php 20K
./plugins/quotas/class.quotas.inc.php 8.0K
./plugins/dmraid/class.dmraid.inc.php 8.0K
./plugins/updatenotifier/class.updatenotifier.inc.php 4.0K
./index.php 4.0K
./config.php 12K
./includes/mb/class.hwsensors.inc.php 8.0K
$ 찾기. -name "test *"-exec du -sh {} \; 4.0K ./test1 0 ./test2 0 ./test3 0. /test4 $
당신은 이것을 시도 할 수 있습니다 :
find. -name *.ear -exec du {} \;
바이트 단위의 크기를 제공합니다. 그러나 du 명령은 -k 매개 변수 -k 및 -m 매개 변수도 허용합니다. 그것은 당신에게 같은 출력을 줄 것입니다
5000 ./dir1/dir2/earFile1.ear
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir3/earFile1.ear
find . -name "*.ear" | xargs ls -sh
다음 명령을 시도하십시오 :
GNU stat
:
find . -type f -name *.ear -exec stat -c "%n %s" {} ';'
BSD stat
:
find . -type f -name *.ear -exec stat -f "%N %z" {} ';'
그러나 stat
는 표준이 아니므로 du
또는 wc
가 더 나은 접근 방법이 될 수 있습니다.
find . -type f -name *.ear -exec sh -c 'echo "{} $(wc -c < {})"' ';'
find . -name "*.ear" -exec ls -l {} \;