특정 접두사로 시작하지 않는 파일 나열

특정 접두사로 시작하지 않는 파일 나열

qc_dl로 시작하지 않거나 qc_dtqd_df시작하는 디렉토리만 나열하면 됩니다 .sas.

다음과 같이 "qc_dl"로 시작하지 않는 파일을 나열할 수 있습니다.

ls -I "qc_dl*" 

그런데 결과 목록에서 SAS 프로그램만 선택하는 방법을 모르겠습니다.

또한 다음과 같이 "qc_dl", "qc_dt" 또는 "qd_df"로 시작하는 모든 SAS 파일을 선택할 수 있습니다.

ls qc_d{l,t,f}*.sas

그러나 이 두 명령을 결합하여 로 시작하지 않는 파일만 나열할 수는 없습니다 qc_dl/t/f.

답변1

대신 사용하시겠습니까 find?

find /my/example/dir -type f -name '*.sas' ! -name 'qc_d[ltf]*'

답변2

남자 배쉬에서 :

내장된 shopt를 사용하여 extglob 쉘 옵션을 활성화하면 여러 확장 패턴 일치 연산자가 인식됩니다. 다음 설명에서 패턴 목록은 |로 구분된 하나 이상의 패턴 목록입니다. 복합 패턴은 다음 하위 패턴 중 하나 이상을 사용하여 형성될 수 있습니다.

         ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

이 기능을 활성화하면 더욱 강력한 패턴 일치를 사용할 수 있습니다.

열어 봐:

~$ shopt -s extglob

.sas그런 다음 다음으로 끝나거나 시작하지 않는 파일을 나열할 수 있습니다 qc_d.

~$ ls
a.sas  a.txt  b.sas  b.txt  c.sas  c.txt  qc_dc.sas  qc_df.sas  qc_dl.sas  qc_dt.sas
~$ ls !(qc_d*).sas
a.sas  b.sas  c.sas

끄려면:

~$ shopt -u extglob

답변3

파일 이름에 개행 문자가 포함되어 있지 않고 다음으로 시작하지 않는다고 가정합니다 ..

ls -d -- *.sas | grep -v '^qc_d[ltf]'

.sas로 끝나는 파일을 나열하고 qc_dl, qc_dt, qc_df가 아닌 모든 파일을 필터링합니다.

필터링이 필요한 경우 grep이 도움이 됩니다.

답변4

ls -d [![.qc_dl.][.qc_dt.][.qd_df.]]*.sas

참고 "맨 7 글로브"
[!...] -> 이 클래스에 속하지 않는 모든 것, grep 또는 정규 표현식의 [^...]와 동일
[.qc_dl.] -> `qc_dl` 내부를 정확하게 처리하기 위한 정확한 모드
문자나 범위 대신 클래스가 발생합니다.  

시나리오: 안녕하세요, Mr. Shell, 시작되지 않은 항목을 모두 나열해 주세요.
"qc_dl", "qc_dt" 또는 "qd_df"에 있지만 둘 중 하나라도 끝나는 경우
.sas를 사용하면 목록을 나열할 수 있습니다.

실험:
$ touchqc_dloooooooo.sas
$ 터치 qc_dloooooooo
$touchqc_dtfffghhjh.sas
$touchqc_dtfffghhjh
$ 터치cvvvbkkk
$ 터치cvvvbxcvvcxv
$ ls -d [![.qc_dl.][.qc_dt.][.qd_df.]]*.sas
qc_dloooooooo.sas qc_dtfffghhjh.sas

관련 정보