최근에 변경된 모든 파일 나열 (재귀)


21

따라서 ls지난 7 일 동안 변경된 모든 파일 을 표시 ( 예를 들어) 하고 싶습니다 . docroot 폴더에 있으면 "더 깊게"보일 수 있습니다.

예를 들면 다음과 같습니다.

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

따라서 ls(또는 myfile1가능한 경우) 출력 하고 (가능한 경우) MySub/sub1.

하나의 명령으로 가능합니까?

답변:


39

당연하지. 현재 디렉토리에서 :

find . -type f -mtime -7 -exec ls -l {} \; 

리디렉션을 추가하십시오 (일명 > results.txt해당 파일에 저장).

  • type f 디렉토리가 아닌 파일 만 수행
  • mtime -7 7 일 전부터 지금까지 (+7은 '7 일보다 오래됨')
  • 그런 다음 ls긴 목록을 표시하도록 피드 합니다.

ls -l부분을 가지고 놀 수도 있습니다.

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

긴 목록 (1) 또는 짧은 목록 (2)의 파일 사이에 디렉토리가있는 트리와 같은 메소드가 표시됩니다.


4
findls그냥 할 수 있도록 옵션find . -type f -mtime -7 -ls
heemayl

그러나 그러나 이것은 좀 더 일반적입니다 (이 방법을 사용하여 제거 해야하는 파일을 찾고 해당 명령을 변경하여 수행 할 수 있습니다 :))
Rinzwind

3
또한 여러 매개 변수로 더 적은 시간을 훨씬 효율적으로 find ... -exec ls -l {} +실행 하는 것이 더 적합합니다 ls -l. findPOSIX 에서 지정한 표준 옵션입니다 .
pabouk

5

zsh:

ls -l **/*(.m-7)
  • **/* 현재 디렉토리에서 재귀 적으로 시작하는 파일을 찾습니다.

  • (.m-7).일반 파일을 m-7표시하고 지난 7 일 이내에 수정 된 파일을 표시하는 glob 규정 자입니다.


2

다음 명령은 Mac OSX에서 꿈을 꾼다-어쩌면 우분투에서도 ...

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

현재 디렉토리 트리에서 지난 7 일 동안 수정 된 파일을 찾아 수정 날짜 + 시간 및 경로를 가장 먼저 정렬하여 출력합니다.

출력 예 :

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

우분투 사용자의 의견에 감사드립니다.


Mac에서 저에게 잘 맞는 유일한 솔루션입니다. 감사!
artnikpro

@artnikpro를 환영합니다!
MrWatson

1

정확히 무엇을 요구했는지는 아니지만 기억하기가 훨씬 쉽습니다.

ls -alRt docroot

또는

ls -alRt /path/to/top/level/directory

0

60 초 * 60 분 * 24 시간 * 7 일 = 604800 초인 7 일

현재 날짜를 초 단위로 확인하십시오 (Unix epoch 시간) :

$ date +%s
1448876323

초에서 7 일을 뺍니다.

expr $(date +%s) - 604800
1448271548

이제 stat"name + time in seconds"형식의 모든 파일에 대한 명령 및 인쇄 통계를 가져 와서 awk수정 시간이 계산 한 날짜보다 큰 파일을 잘라내십시오.

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

7 일 전보다 적게 작업 한 것을 알고 있기 때문에 특히 관심있는 것은 마지막 3 개의 파일입니다. 따라서 나는 그것이 작동한다는 것을 안다


2
awk '$2 > 1448271265 {print $0}'당신 대신에 무분별하게 말할 수 있습니다 awk '$2 > 1448271265'. 실제 조건에서 awk는 현재 행을 기본 조치로 인쇄합니다.
fedorqui
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.