![AWK 명령에 다중 검색을 추가하는 방법](https://rvso.com/image/50595/AWK%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8B%A4%EC%A4%91%20%EA%B2%80%EC%83%89%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
6월, 7월, 8월에 생성된 파일을 검색하려고 합니다. 나는 이 방법을 사용했다
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
하지만 작동하지 않습니다.
답변1
다음과 같이 여러 패턴을 일치시킬 수 있습니다.
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
그러면 6월, 7월 또는 8월에 대한 모든 일치 항목이 반환됩니다. 이는 의 기본 작업 print
이므로 해당 문이 필요하지 않습니다.awk
답변2
일반적으로 다음을 수행하는 것은 매우 나쁜 생각입니다.ls의 출력을 구문 분석. 원하는 것을 수행하는 더 좋은 방법은
stat -c "%n %y" * | grep 2013-0[678]
또는 파일 이름 자체가 날짜인 경우를 방지하기 위해 마지막 필드만 확인하십시오.
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
에서 man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
답변3
ls
파일에 대한 정보를 사람이 읽을 수 있는 형태로 표시하는 명령입니다.스크립트에서는 사용하지 마세요.
특정 기준과 일치하는 디렉토리 트리에서 파일을 찾는 명령은 다음과 같습니다.find
. GNU 찾기(예: 내장되지 않은 Linux 또는 Cygwin) 또는 FreeBSD 찾기(예: FreeBSD 또는 OSX)가 있는 경우 -newermt
특정 날짜 이후에 마지막으로 수정된 파일을 일치시키는 데 사용할 수 있습니다 .
find . -newermt '1 June' ! -newermt '1 September' -print
스크립트가 실행되는 연도가 아닌 특정 연도의 파일을 일치시키려면 연도를 추가하십시오.
find 구현에 가 없으면 찾은 파일의 날짜를 고정된 파일과 비교 -newermt
하는 을 수행해야 합니다 . 경계로 사용하려는 날짜가 포함된 임시 파일을 만드는 데 사용합니다 .-newer
find
touch
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"