ls로 날짜 이후에 생성 된 파일 만 가져 오는 방법은 무엇입니까?


97

ls명령을 사용하면 특정 날짜, 시간 후에 작성된 파일 만 표시 할 수 있습니까?

수천 개의 파일이있는 디렉토리가 있기 때문에 묻습니다.

어제부터 작성된 모든 파일을보고 싶습니다.

사용 ls -ltr하지만 모든 파일을보기 위해 기다려야합니다 ...

DIRECTORY/SINCE=dateOpenVMS 와 동등한 것이 있습니까?


1
ls파일을 나열하지만 나열 할 파일이나 출력 형식을 선택하는 것은별로 제공하지 않습니다. 글 로빙 (쉘 와일드 카드)을 사용하거나 find이름 또는 메타 데이터 (예 : 날짜)로 파일을 선택하려는 경우.
Gilles

3
그래서 ls와의 데이트는 어떻게 되었습니까? 둘이 맞았 어?
Garrett Albright

3
함께 zsh:ls -1 -- *(.m-1)
don_crissti

답변:


123

find명령을 사용하여 특정 일 수 후에 수정 된 모든 파일을 찾을 수 있습니다 .

예를 들어, 어제 (24 시간 전) 이후 수정 된 현재 디렉토리의 모든 파일을 찾으려면 다음을 사용하십시오.

find . -maxdepth 1 -mtime -1

즉 수정 된 파일 찾기 위해 참고 하기 전에 당신이 사용해야하는 24 시간 전 -mtime +1대신 -mtime -1.


3
내가 말한 바로 그 것. ls여기로 자신을 제한 할 이유가 없습니다 , Luc.
워렌 영

14
GNU find를 사용하면 다른 가능성이 있습니다. -mmin 5지난 5 분 동안 수정 된 파일을 나열합니다. -newermt "2011-02-27 13:42"지정된 날짜 이후 수정 된 파일을 나열합니다. -exec ls --color -ld {} +대신 -ls일반적인 ls 컬러 디스플레이를 얻는 대신에 컬러 ls 출력을 사용할 수 있습니다 .
Gilles

3
빼기 부호를 참고하십시오.find . -mmin -5
user7543

및 -maxdepth 1도 하위 수준에서 파일을 검색 할 수있는 n 값을 증가시킬 수있다
anshuman

3
나를 위해 다음과 같이 작동합니다 : find. 타입 F -newermt '2012년 1월 15일 18시 9분 0초'
을 떠올리게

14
find . -type f -newermt '1/30/2017 0:00:00'

특정 날짜 이후에 수정 된 모든 파일을 찾습니다.


1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"

5
하이트 란 트! 귀하의 솔루션이 ls를 사용하는 질문의 요청을 존중하려고 시도하는 동안 창의적이지만 ls의 출력을 파싱하는 것은 거의 안전하지 않습니다 (예 : 여기에서 줄 바꿈을 포함한 파일 이름으로 어떤 일이 발생합니까?). 라이너가 아니라 관련성에 대해 자세히 설명합니다.
dhag 2016

1
문제 : (1) 내 시스템에서 date이라고 Jun 03하지만 ls이라고 말하면 Jun  3작동하지 않습니다. (2) 일주일 전 날짜는 5 월 27 일이었습니다.  ls -l | grep "May 27"그 날 수정 된 파일과 다른 해의 5 월 27 일 수정 된 파일 및 이름에“5 월 27 일”이있는 파일이 있습니다. (당신이 생각하는 경우 그리고 그 조회, 완전히 가짜 우려의 "년 12 월 10" 당신이 얻을 관리하는 경우.) (3) 그리고 date말을 Jun 2찾을 것이라고에 대한 grepping, Jun 20를 통해 Jun 29,하지만 Jun  2(두 개의 공백). … (계속)
G-Man

1
(계속)… (4) OP는 ls -ltr리스팅이 끝날 때 가장 최근에 수정 된 파일을 가져 오는 데 사용 했습니다. 날짜를 잡으려는 경우 그럴 필요가 없습니다 (2014 년 5 월 27 일, 2013 년 5 월 27 일 등의 파일 이후에 목록이 끝날 때 2015 년 5 월 27 일 파일은 제외). (5) awk에서는 print $2, $3에 해당 print $2" "$3하며 읽기가 훨씬 쉽습니다. 특히 세 가지 다른 인용 부호가있을 때 더욱 그렇습니다.
G-Man

ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo

0

이것이 효과가 있기를 바랍니다.

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

이리:

$6 indicates position of month
$7 indicates day of the month

이 명령은 5 월 1 일부터 5 월 31 일까지 또는 그 이후에 생성 된 모든 파일 이름을 인쇄합니다

콘솔에서도 날짜를 인쇄하려면 이것을 시도하십시오

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

디렉토리의 경로를 지정하려면 이것을 시도해보십시오

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

여러 가지 이유로 ls출력 을 구문 분석하는 것은 좋지 않습니다 . 모두가 영어를 구사하는 것은 아닙니다 :-)
Luc M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.