it-swarm-ko.tech

파일 이름으로 파일 크기를 인쇄하는 find 명령을 어떻게 얻습니까?

다음과 같이 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
85
Brian
find . -name '*.ear' -exec ls -lh {} \;

jer.drab.org의 답변에서 여분의 h. 정신적으로 MB로 변환하는 시간을 절약합니다.)

92
shyam

-exec 또는 -printf를 사용해야합니다. Printf는 다음과 같이 작동합니다.

find . -name *.ear -printf "%p %k KB\n"

-exec는 더 강력하고 임의의 명령을 실행할 수 있습니다. 따라서 'ls'또는 'wc'버전을 사용하여 다른 정보와 함께 파일 이름을 인쇄 할 수 있습니다. 'man find'는 printf에 사용할 수있는 인수를 보여줍니다.

[edit] -printf는 공식 POSIX 표준이 아니므로 사용중인 버전에서 지원되는지 확인하십시오. 그러나 대부분의 최신 시스템은 GNU 찾기 또는 유사하게 확장 된 버전을 사용하므로 구현 될 가능성이 높습니다.

94
Leigh Caldwell

간단한 해결책은 find에서 -ls 옵션을 사용하는 것입니다.

find . -name \*.ear -ls

일반적인 "ls -l"형식으로 각 항목을 제공합니다. 또는 찾고있는 특정 출력을 얻으려면 다음과 같이하십시오.

find . -name \*.ear -printf "%p\t%k KB\n"

파일 이름 뒤에 KB 크기가 표시됩니다.

21
Michael Cramer

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 \{\} \;
19
dmazzoni
find . -name '*.ear' -exec du -h {} \;

이것은 모든 불필요한 것들 대신 파일 크기만을 제공합니다.

7
user2121791

du -a를 사용하지 않는 이유는 무엇입니까? 예 :.

find . -name "*.ear" -exec du -a {} \;

Mac에서 작동

4
Andreas

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
4
tpgould

Find 명령이 -printf를 지원하지 않는 Mac OS X에서이 문제로 어려움을 겪었습니다.

내가 찾은 해결책은 분명히 '스태프'인 모든 파일에 대해 '그룹'에 의존한다는 것입니다 ...

ls -l -R | sed 's/\(.*\)staff *\([0-9]*\)..............\(.*\)/\2 \3/'

이것은 긴 출력을 세 개의 토큰으로 나눕니다.

  1. 텍스트 '직원'앞의 것들
  2. 파일 크기
  3. 파일명

그리고 토큰 2와 3을 출력합니다. 즉, 출력은 바이트 수입니다.

8071 sections.php
54681 services.php
37961 style.css
13260 thumb.php
70951 workshops.php
3
Mike M

이것은 당신이 찾고있는 것을 얻을 것입니다. 포맷이 포함되어 있습니다 (즉, 먼저 파일 이름과 크기).

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
2
adriano72
 $ 찾기. -name "test *"-exec du -sh {} \; 
 4.0K ./test1
0 ./test2
0 ./test3
0. /test4
$

스크립트 세계 참조

1
scripter

당신은 이것을 시도 할 수 있습니다 :

find. -name *.ear -exec du {} \;

바이트 단위의 크기를 제공합니다. 그러나 du 명령은 -k 매개 변수 -k 및 -m 매개 변수도 허용합니다. 그것은 당신에게 같은 출력을 줄 것입니다

5000  ./dir1/dir2/earFile1.ear
5400  ./dir1/dir2/earFile2.ear
5400  ./dir1/dir3/earFile1.ear
1
Yaba
find . -name "*.ear" | xargs ls -sh
1
killdash10

다음 명령을 시도하십시오 :

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 < {})"' ';'
1
kenorb
find . -name "*.ear" -exec ls -l {} \;
0
Jeremy Weathers