다음보다 최신인 모든 파일을 나열하고 싶습니다(날짜순으로 정렬).타임스탬프20130207003851
/tmp 디렉토리의 형식만 사용합니다. 하위 디렉터리는 생략할 수 있습니다.
SUSE Linux Enterprise Server 11을 사용합니다.
출력 형식은 다음과 같아야합니다
S0002948.LOG Feb 7 03:28
S0002935.LOG Feb 7 05:58
S0002952.LOG Feb 7 09:58
S0002940.LOG Feb 7 11:58
/tmp -newermt "2013년 2월 7일" -ls 찾기내가 원하는 파일이 나열되어 있지만
- 20130207003851 형식의 타임스탬프를 사용하는 방법
- 출력을 어떻게 정렬합니까?
- 파일 이름과 날짜만 표시하려면 어떻게 해야 합니까? 파일 이름이 먼저이고 날짜가 다음입니까?
ps. 조회용 참조 파일을 생성하기 위해 터치를 사용하고 싶지 않습니다.
쉿
find -newermt "20130207003851" -ls
find: I cannot figure out how to interpret `20130207003851' as a date or time
답변1
find
많이 지원해주세요날짜 입력 형식. 가장 간단한 형식은 YYYYMMDD HH:MM:SS입니다. 이미 올바른 순서의 숫자가 있으므로 첫 번째 그룹을 추출하기만 하면 됩니다( ${timestamp%??????}
: 마지막 6자를 제외한 모든 문자 추출, ${timestamp#????????}
: 처음 8자를 제외한 모든 문자 추출). 그런 다음 계속해서 구두점 기호를 추가하고 다음을 추가합니다. 앞으로 나아갈 때 다음 그룹.
timestamp=20130207003851
timestring=${timestamp%??????}; timestamp=${timestamp#????????}
timestring="$timestring ${timestamp%????}"; timestamp=${timestamp#??}
timestring="$timestring:${timestamp%??}:${timestamp#??}"
bash(및 ksh 및 zsh)에서는 ash가 아닌 더 읽기 쉬운 ${STRING_VARIABLE:OFFSET:LENGTH}
구성을 사용할 수 있습니다.
timestring="${timestamp:0:8} ${timestamp:8:2}:${timestamp:10:2}:${timestamp:12:2}"
날짜별로 파일을 정렬하려면 날짜 앞에 파일 이름을 인쇄하고 정렬한 다음 날짜 접두사를 제거하세요. 사용-printf
출력 형식을 제어합니다. 결정된 수정 시간의 비율을 인쇄합니다. 그렇다면 Unix 시대 이후의 초 수를 얻습니다. 아래에서는 정렬 가능한 형식의 시간, 파일 이름 및 사람이 읽을 수 있는 형식의 시간이라는 세 개의 탭으로 구분된 열을 인쇄합니다. 첫 번째 열을 제거하고 예상되는 모든 파일 이름을 수용할 수 있는 충분한 공백이 있는 탭 교체를 호출합니다(필요에 따라 40 조정). 이 코드는 파일 이름에 줄 바꿈이나 탭이 없다고 가정합니다.%TX
X
X
@
cut -f 2-
expand
find -maxdepth 1 -type f \
-newermt "$timestring" -printf '%T@\t%f\t%Tb %Td %TH:%TM\n' |
sort -k1n |
cut -f 2- |
expand -t 40
답변2
그리고 zsh
:
zmodload zsh/stat
newer() {
local t
zstat -A t -F %Y%m%d%H%M%S +mtime -- $REPLY && (( t >= timestamp ))
}
timestamp=20130207003851
print -rl -- /tmp/*(D.Om+newer)
newer
이 함수는 업데이트된 파일에 대해 true를 반환합니다 $timestamp
(단, 1초 미만의 정밀도에는 지원 zsh
되지 않습니다).zstat
그런 다음 우리가 해야 할 일은 zsh
globbing 한정자를 사용하는 것입니다. D
도트 파일을 포함하고, .
일반 파일만 고려하고, Om
수정 시간별로 정렬하고, 선택할 파일을 결정하는 함수를 +newer
호출합니다 .newer
파일 타임스탬프도 표시하려면 다음 newer
과 같이 변경할 수 있습니다.
newer() {
local t
zstat -A t -F %Y%m%d%H%M%S +mtime -- $REPLY &&
REPLY+=$'\t'$t &&
(( t >= timestamp ))
}
파일 이름 생성 결과에는 타임스탬프가 포함되므로 더 이상 파일 이름으로 사용할 수 없습니다.