qc_dl
로 시작하지 않거나 qc_dt
로 qd_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