web-dev-qa-db-fra.com

Complétion automatique sur les correspondances partielles au milieu d'un nom de fichier dans Terminal (dash / bash)

J'ai un tas de répertoires:

20130118-Cars_Directory
20130118-Bikes_Directory
20130218-Planes_Directory
20130228-Scooters_Directory

Est-il possible de changer de répertoire en tapant une correspondance partielle au milieu de la commande?.

Idéalement, quelque chose dans le style de cd *Bikes*<TAB>, et dash autocomplete le reste?

5
somethis

En fait, par hasard, il s'avère que cd *Bikes*<RETURN> fonctionne sans modification du système.

Je suis juste un peu étonné de ne pas avoir besoin de guillemets autour de *Bikes*.

3
somethis

Vous pouvez le faire en créant un alias pour cd et en définissant un achèvement bash comme votre volonté. Voir Manuel d’achèvement de Bach .

Voici un guide étape par étape. Je vais utiliser "scd" pour notre nouvelle commande, mais vous pouvez aussi utiliser "cd".

1) Modification du fichier .bashrc

gedit ~/.bashrc  

2) Création de l'alias
Collez ceci dans la finale du fichier ".bashrc":

# Alias for making a "Super cd"

alias scd="cd"

_scd_completion() {
    mapfile -t COMPREPLY < <(ls -d */ | grep "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _scd_completion scd

Sauver et fermer.

3) Ouvrez un nouveau terminal
Ou exécutez: source ~/.bashrc

4) Comment utiliser

Appelez simplement la commande suivie d’une partie du nom du répertoire que vous voulez aller.

scd Bikes<TAB>

Terminé. Prendre plaisir!

5
desgua

Essayez d’utiliser l’outil appelé z , il permet ce dont vous avez besoin, en plus de créer une base de données globale pondérée par la fréquence de vos cd et de vous permettre de passer instantanément au lieu fréquemment visité.

Si vous avez visité le répertoire Bikes, vous pouvez taper plus tard

z Bikes

et vous allez y sauter

1
ganqqwerty