2016-07-05 2 views
1

bash을 사용하여 특정 파일 확장자 .vcf을 나열하려고합니다. 내가 겪고있는 문제는 디렉토리에 복수 .vcf이있을 수 있지만, 필요한 파일은 _이 아니라 단지 xxx.vcf (name.vcf) 형식이어야한다는 것입니다. 나는 이것을하는 방법을 모르지만 아래는 가깝게 보인다. 고맙습니다 :).조건이 충족되는 경우에만 특정 유형의 파일을 나열하는 bash

디렉토리 파일

123.vcf 
123_count.txt 
123_variant_list.vcf 

bash는

select file in $(cd /home/file/overall/stats;ls *.{vcf});do break;done 
     echo $file 

당신은 모든 Fi를 나열 할 수

123.vcf 

답변

3

한 가지 방법은 find 간단한 정규식을 사용하는 것입니다 :

find -regex '[^_]*.vcf' 

당신이 정규식을 사용하지 않으려면 (123)의 제안 @ 따라 정기적으로 대체 (globbing)와 경기의 일부 무효로 할 수 있습니다 : 당신이 명시 적으로 하위 디렉토리를 생략하려면

find ! -name '*_*' -name '*.vcf' 

을 :

를 명시 적 경로를 지정하지 선도 ./ find 그 앞에 추가합니다 당신을 귀찮게하는 경우
find -maxdepth 1 ... 

, 당신은 그것을 제거 basename를 사용할 수 있습니다

basename $(find ...) 

당신이 다른 프로그램의 경로를 전달하려는 경우 , 선도 인 ./은 문제가되지 않습니다.

+3

정규식이 필요하지 않습니다. 당신은'! -name "* _ *"'. Regex는 이식성이 떨어집니다. – 123

+1

@ 123. 그건 '.vcf'부분과 일치하지 않습니다. –

+0

'regex'를 사용하면'./123.vcf' 파일을 얻을 수 있으며'. /'파일이 왜 있는지와 어떻게 제거합니까? 고맙습니다 :). – Chris

1

원하는 출력 les과 grep은 "_"을 포함하지 않습니다.

$ file=$(ls | grep "vcf" | grep -v "_") 


$ ls | grep vcf 
123.vcf 
123_count.txt 
123_variant_list.vcf 

$ echo $file 
123.vcf 
+1

그리고'ls -als' 명령으로 긴 목록을 제공하지 않은 방법은 무엇입니까? – Fazlin

+1

둘 다 맞습니다! 나는 순수한 습관으로'--als'을 여기에 덧붙였다. 내 cli 예제에서 나는 그것을 추가하지 않았다. '-als'와 함께 작동하지 않기 때문에 나는 그것을 내 게시물에서 삭제했습니다. 나는 또한 첫 번째 grep을 삭제했다. – cb0

+0

감사합니다. – Chris

5

extglob을 활성화하고 말 :입니다

$ echo !(*_*).vcf 
123.vcf 

을 : 모든 파일 어떤 _을 포함하고 .vcf로 끝나는하지 일치 :

$ ls -1 
123_count.txt 
123.txt 
123_variant_list.vcf 
123.vcf 
$ shopt -s extglob 
$ echo !(*_*).vcf 
123.vcf 

배쉬 Reference Manual → 4.3.2 The Shopt Builtin에서 :

설정하면

extglob

상술 한 특징과 일치 확장 패턴 활성화 ( Pattern Matching 참조).

더 tzot의 대답에 정보 How can I use inverse or negative wildcards when pattern matching in a unix/linux shell? 에 :

!주어진 패턴 중 하나를 제외하고 아무것도 일치 (패턴 목록)

+0

멋진 anwser! zsh에서'shopt -s extglob' 명령과 동일한 명령을 알고 있습니까? 나는'setopt extendedglob'과'set + o extendedglob'을 시도했지만 echo! (* _ *) .vcf는'! (* _ *) .vcf' 만 출력합니다. – cb0

+0

@ cb0 [명백하게] (http://www.zsh.org/mla/users/2006/msg00727.html),'setopt extendedglob'. – fedorqui

+0

@ cb0 당신은'ksh_glob'을 시도해 볼 수 있습니다. – 123

관련 문제