2016-10-30 7 views
1

bash를 구성하여 파일 이름을 확장하여 파일 이름을 확장하면 모든 하위 폴더와 현재 폴더가 검색됩니다.Bash : 모든 하위 폴더의 파일 이름 완성 완료

readme.txt colors/red.txt people/roger.txt

+0

를, 또는 :

complete -F _comp_less less 

이제 less r<tab> 완료는 다음과 같이

기능은 less을 위해 사용하는 명령과 함께, 당신의 .bashrc에 갈 수 있습니다 ? –

+0

항상 "x "이 일반적으로 현재 폴더에서 x로 시작하는 모든 파일을 반환 할 때마다 아래 폴더에서도 모두를 반환 할 수 있습니다. – mahemoff

+0

'compgen -F' 동작을 오버라이드해야하므로 _always_가 발생할 수 있는지 확실하지 않습니다. 당신은 아마 당신 자신의 완성 기능을 가진 특정한 명령을 위해 그것과 비슷한 것을 얻을 수 있습니다. –

답변

1

다음과 같은 상황을 가정 할 때, 하위 디렉토리 두 가지 수준의 포함 : 내 폴더 구조

readme.txt 
colors/blue.txt 
colors/red.txt 
people/roger.txt 

내가 less r<tab> (또는 어쩌면 less **/r<tab>을 원하는 모든 확장 옵션이 r로 시작하는 보여주기 위해 확장

. 
├── colors 
│   ├── blue.txt 
│   └── red.txt 
├── completion.bash 
├── people 
│   ├── rdir 
│   ├── roger.txt 
│   └── subdir 
│    └── rhino.txt 
└── readme.txt 

원하는 완성도를 얻을 수 있습니다. 이 기능 i 번째 :

_comp_less() { 
    # Store current globstar setting and set globstar if necessary 
    local glob_flag 
    if shopt -q globstar; then 
     glob_flag=0 
    else 
     glob_flag=1 
     shopt -s globstar 
    fi 

    # $2 is the word being completed 
    local cur=$2 

    # Loop over all files and directories in the current and all subdirectories 
    local fname 
    for fname in **/"$cur"*; do 

     # Only add files 
     if [[ -f "$fname" ]]; then 
      COMPREPLY+=("$fname") 
     fi 
    done 

    # Set globstar back to previous value if necessary 
    if ((glob_flag == 1)); then 
     shopt -u globstar 
    fi 

    return 0 
} 

그것은 globstar 쉘 옵션을 확인하고 필요한 경우 설정 (그리고 그것으로 시작하도록 설정되지 않은 경우 다시 설정을 해제)를 선택한 다음 모든 파일과 디렉토리를 얻을 수있는 **/"$cur"* 글로브를 사용 (하위 디렉토리 포함)을 선택하고 마지막으로 디렉토리 이름을 필터링합니다. 언제나 특정 명령의

$ less r 
colors/red.txt   people/subdir/rhino.txt 
people/roger.txt   readme.txt