파일 이름에 지정된 문자열과 일치하지 않는 파일을 나열하십시오. 있는 많은

이름 temp_log.$$이 있는 많은 파일 (약 200 개)이 확인해야 할 다른 중요한 파일로 만들어 지는 디렉토리 가 있습니다.

모든 파일을 쉽게 나열하고 temp_log.$$파일이 표시되지 않도록 하려면 어떻게해야합니까?

예상 출력

$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string

내가 겪었 lsman 페이지 만이 참조에서 아무것도 찾을 수 없습니다. 여기서 중요한 정보를 놓친 경우 알려주십시오.

감사



답변

GNU ls(임베디드 Linux 및 Cygwin의 버전, 때로는 다른 곳에서도 있음)를 사용하여 디렉토리를 나열 할 때 일부 파일을 제외 할 수 있습니다.

ls -I 'temp_log.*' -lrt

(의 긴 형식은 -I입니다 --ignore='temp_log.*')

zsh를 사용하면 셸에서 필터링을 수행 할 수 있습니다. 패스 -dls일치하는 디렉토리의 내용을 나열 피하기 위해.

setopt extended_glob          # put this in your .zshrc
ls -dltr ^temp_log.*

ksh, bash 또는 zsh와 함께 ksh 필터링 구문을 사용할 수 있습니다. zsh에서 setopt ksh_glob먼저 실행하십시오 . bash에서 shopt -s extglob먼저 실행하십시오 .

ls -dltr !(temp_log.*)

답변

grep옵션과 함께 사용할 수 있습니다 -v.

ls -lrt | grep -v <exclude-filename-part>

답변

find이것을 위해 사용할 수 있습니다 :

find . \! -name 'temp_log*'

이름을 인쇄하고 타임 스탬프 및 권한 -ls으로 ls -l스타일 출력을 추가 하거나 -exec ls {} +열, 정렬 등에 원하는 옵션을 사용 하여 실제로 ls에 전달하는 데 사용할 수 있습니다.

나는 이것이 디렉토리에있는 파일이라고 가정하여 이것을 썼습니다. 디렉토리에 다른 디렉토리가 포함되어 있으면 재귀 적으로 나열하지 않도록 할 수 있습니다

find . \! -name 'temp_log*' -maxdepth 1

ls를 사용하면 -d 옵션을 전달 하여 디렉토리 내부에 나열되지 않도록 할 수 있습니다.-exec ls -d {} +


답변

의 기능이 아닌 쉘의 기능을 사용하고 싶다고 생각합니다 ls. bash를 사용하므로에서 원하는 것을 확인했습니다 man bash. “^ EXPANSION”을 검색하십시오 (먼저 ‘/’를 누름). 발췌 :

확장

    확장은 단어로 분할 된 후 명령 행에서 수행됩니다. 괄호 확장 , 물결표 확장 , 매개 변수 및 변수 확장 , 명령 대체 , 산술 확장 , 단어 분할경로 이름 확장의 7 가지 확장이 수행 됩니다.

   ︙
… <싹둑>>
   ︙

경로명 확장

    하지 않는 단어 분할 한 후, -f 옵션이 설정되어, 배쉬는 문자에 대한 각 단어를 검색 *, ?[. 이러한 문자 중 하나가 나타나면 단어는 패턴으로 간주되고 패턴 과 일치하는 알파벳순으로 정렬 된 파일 이름 목록으로 대체됩니다. …

최근에 첫 번째 문자를 기반으로 파일을 제외하기 시작했습니다.

$ ls ./[^t]*

이것은 글자로 시작하지 않는 것과 일치합니다 t. 대괄호 사이에 문자를 더 추가하면 해당 문자로 시작하는 파일도 제외됩니다.

링크를 찾고 좋은 링크를 찾았습니다! 패턴 일치를 참조하십시오 . 거기에서 이것은 귀하의 경우에 효과가 있습니다.

$ ls -lrt ./!(temp_log.*)

이를 위해서는 Gilles가 언급 한대로 extglob쉘 옵션이 shopt내장 ( shopt -s extglob)을 사용하여 활성화 되어야합니다 .


답변

그냥 해

ls -ltr `grep -il patterntosearch  *`

답변

파일 때문에 당신은 그나마 인쇄 싶다 “temp_log을.”가 파일 이름에서 grep을 사용하여 필터링하십시오.

ls -lrt | grep -v "temp_log."

참고 : 사용자가 grep에서 찾아야하는 문자열 주위에 따옴표 “”를 포함하지 않았기 때문에 비슷한 답변을 가진 다른 게시물이 다운 보트되었을 수 있습니다. 따옴표가 없으면 광고 된대로 작동하지 않습니다.