![검색에서 파일 필터링](https://linux55.com/image/67066/%EA%B2%80%EC%83%89%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%BC%20%ED%95%84%ED%84%B0%EB%A7%81.png)
ls
날짜와 타임스탬프가 포함된 파일이 있는데 다음과 같이 출력에서 제외하고 싶습니다 .
test.log.15-05-25_20:41:05.20150611
test.log.15-05-27_20:28:32.20150611
test.log.15-05-26_20:29:40.20150611
test.log.
test-file~df_gp~1.log.
test.log.20150616
test.log.15-05-28_20:28:27.20150616
test.log.15-05-27_20:28:32.20150616
test.log.15-05-26_20:29:40.20150616
test.log.15-05-25_20:41:05.20150616
test-bat-test.log.
출력에는 다음 파일만 나열되어야 합니다. 즉, 날짜와 타임스탬프가 포함된 파일은 생략해야 합니다.
test.log.
test-file~df_gp~1.log.
test-bat-test.log.
내가 할 수 있는 방법이 있나요?
답변1
GNU를 사용할 수 있습니다 find
.
find * -regextype posix-extended \! -regex '.*[0-9]{8}.*' -prune
날짜가 항상 문자열 끝에 있고 앞에 오는 경우 .
정규식을 사용하여 .*\.[0-9]{8}
이를 반영하고 파일을 잘못 제외하는 위험을 줄일 수도 있습니다.
작동 방식:
-regextype posix-extended
아래 정규식에 적합한 정규식 유형을 선택하세요.\!
다음 문장의 의미를 부정하세요-regex '.*[0-9]{8}.*'
연속된 8자리 숫자(예: 형식의 날짜20150616
) 가 포함된 모든 파일과 일치합니다.-prune
find
하위 디렉터리가 나열되지 않도록 방지
다른 옵션:
-f
파일만 나열하는 옵션 추가
편집하다:
정규식을 지원하지 않는 AIX에서는 find
다음을 사용할 수 있습니다(표준 전역 메커니즘 사용).
find * \! -name '*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' -prune
또는 날짜가 항상 문자열 끝에 있고 앞에 가 오는 경우 .
다음 패턴을 사용할 수 있습니다.*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
편집 2:
파일을 로 시작하려면 다음을 test
사용할 수 있습니다.
find * -prune -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
쉘을 통한 파일 이름 확장을 사용하고 싶지 않고 해당 디렉토리에 다른 디렉토리가 없는 경우 다음을 사용할 수도 있습니다.
find . -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
답변2
나는 보통 이것을 | grep -v
원하지 않는 행을 필터링하는 데 사용합니다. grep이 충분히 제거되지 않으면 다른 것을 추가하겠습니다.
$ ls | grep -v 2015 |grep -v 2014
이는 find에 대한 정규식 posix 인수를 기억하는 것보다 쉽습니다 :)