'찾기'명령으로 수정 된 날짜 시간을 표시하는 방법은 무엇입니까?


85

find명령을 사용하여 여러 수준의 디렉터리 이름을 표시 할 수 있습니다. 다음 명령 /var은 깊이가 2 인 경로 아래의 모든 디렉토리를 표시합니다 .

find /var -maxdepth 2 -type d;

결과는 다음과 같습니다.

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

stat명령을 사용 하여 수정 된 날짜 시간을 찾을 수 있습니다.

stat /var/log/samba | grep 'Modify:'

결과는 다음과 같습니다.

Modify: 2014-01-02 11:21:27.762346214 -0800 

디렉토리가 수정 된 날짜 시간으로 나열되도록 두 명령을 결합하는 방법이 있습니까?

답변:


63

당신은 사용할 수 -exec에 대한 스위치 find및 출력 형식 정의 stat사용하여 -c다음과 같이 스위치를 :

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

이것은 출력의 같은 줄에 파일 이름 뒤에 수정 시간을 제공해야합니다.


내 대답보다 낫다 +1
Kent

-printf호출을 피 아래 옵션을 stat모든 파일에 대해 찾을. 내 테스트에서 명령은 거의 동일한 출력을 생성하며 초 단위의 추가 자릿수 정밀도입니다.
mwfearnley

MacOS의 경우 형식 인수 문자는 stat입니다 -f. find /var -maxdepth 2 -type d -exec stat -f "%t%Sm %N" {} \;
toddcscar

125

허용되는 답변은 작동하지만 느립니다. 각 디렉토리에 대해 stat를 실행할 필요가 없으며 find는 수정 날짜를 제공하며 직접 인쇄 할 수 있습니다. 다음은 상당히 빠른 동등한 명령입니다.

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"

4
훨씬 더 나은 솔루션입니다. 또한 명령 find이없는 Windows에서 실행 되는 from msys 에서도 작동합니다 stat.
Snorfalorpagus 2014 년

7
Mac에서는 'brew install findutils'를 입력 한 다음 gfind에 -printf 옵션이 있습니다.
WeakPointer

%Tc"로케일의 날짜 및 시간"을 인쇄하여 형식 문자열 "% p % Tc"를 허용합니다.
Andreas

% 포맷터에 대한 설명에 대한 더 유용한 링크입니다. unix.stackexchange.com/a/215236/216480 또는 man 페이지 에서 "
-printf

1
형식 문자열 "% p % Tc"는 작동하지만 출력 형식은 약간 다릅니다. 예 : "/ var / spool 2014-09-29 09 : 05 : 54.000000000 +0100"대신 "/ var / spool Mon 29 Sep 2014 09:05:54 BST".
kzar

15

find /var -maxdepth 2 -type d | xargs ls -oAHd

이것은 ls전체 디렉토리 경로를 표시하는 기본 명령 을 얻는 방법 입니다. 재귀 검색에 ls대한 -R매개 변수 가 있지만 경로는 -l또는 -o옵션 (적어도 OSX에서는)을 사용 하여 결과에 표시되지 않습니다 ls -lR.


질문에 대한 답을 설명해주세요. 일반적으로 StackOverflow에 대한 답변에 예제 코드를 게시 할 때마다 항상 이에 대한 설명을 제공하는 문화가 있습니다. 그렇지 않으면 중재자가 짧은 길이와 설명 부족으로 인해 품질이 낮은 답변으로 답변을 삭제할 위험이 있습니다.
sideshowbarker 2015 년

3
이것은 당신이 얻을 수 find /var -maxdepth 2 -type d -ls있는 것입니다.
Grzegorz Krauze

13

의 최신 GNU 버전 에는 날짜 필드를 포함 find하는 -printf옵션 도 포함 되어 있습니다. 표준 "C"형식으로 파일 이름과 수정 시간을 인쇄해야하는 경우 -printf "%c %p\n".

특정 형식의 날짜를 원하는 경우 %C뒤에 필드 문자를 사용할 수 있습니다 . 예를 들어, 4 자리 해가 될 것 %CY으로, Y4 자리 연도의 문자 인.
여러 필드가 필요한 경우 %C여러 번 지정해야합니다 . 예를 들어 YYYY-MM-DD 형식은 다음과 같습니다 %CY-%Cm-%Cd.

자세한 내용은 매뉴얼 페이지 또는 온라인 설명서 를 확인 하십시오.

다음은 작동하는 예입니다.

find . -name favicon.ico -printf "%c %p\n"

8

마지막 날에 수정 된 파일을 인쇄하는 데 사용하는 또 다른 파일입니다. ls -ltr은 수정 시간, 사용자 등과 같은 더 자세한 정보를 제공합니다.

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 

1
이것은 가장 간단하고 기억하기 쉬우 며 입력하기 가장 빠릅니다. (나는 -mtime 및 -type args없이 -name '*.ext'사양을 사용하는 대신 사용합니다 . ls -lt수정 시간에 정렬합니다.)
Brent Faust

1
파일 이름에 공백이 있으면 작동하지 않습니다. 더 나은 사용하는 -print0대신 -print다음 사용하는 xargs -0대신 xargs.
emk2203

1

이 줄을 시도하십시오.

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

여기에서 실행하면 다음과 같이 출력됩니다.

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.