Автор Тема: Комфортно cd  (Прочетена 15852 пъти)

sharan4o

  • Напреднали
  • *****
  • Публикации: 125
    • Профил
Комфортно cd
« -: May 07, 2009, 15:20 »
Превод от http://www.pro-linux.de/news/2009/14160.html:

Удобна смяна на директории fcd (find change directory). Няма нужда да се въвежда целия път до директорията:
Примери:
1. Директория с уникално име във файловата система
Код
GeSHi (Bash):
  1. user@rechner:~> fcd rc3.d
  2. user@rechner:/etc/rc3.d>
  3.  

2. Директория с неуникално име
Код
GeSHi (Bash):
  1. user@rechner:/etc/rc3.d> fcd linux
  2. 1) /user/alsa/alsa-driver-1.0.17/include/linux
  3. 2) /usr/include/linux
  4. 3) /usr/lib/gcc/i486-linux-gnu/4.1/include/linux
  5. 4) /usr/lib/gcc/i486-linux-gnu/4.3/include-fixed/linux
  6. 5) /usr/lib/perl/5.10.0/linux
  7. 6) /usr/share/zsh/functions/Completion/Linux
  8. 7) /usr/src/linux-2.6.14.4/include/linux
  9. 8) /usr/src/linux-headers-2.6.26-2-686/include/linux
  10. 9) /usr/src/linux-headers-2.6.26-2-common/include/linux
  11. 10) /usr/src/modules/alsa-driver/include/linux
  12. #? 2
  13. user@rechner:/usr/include/linux>
  14.  

3. Може да се въведе и субстринг от уникално име на директория:
Код
GeSHi (Bash):
  1. user@rechner:/usr/include/linux> fcd voice
  2. user@rechner:/var/spool/asterisk/voicemail>
  3.  

4. Или сусбтринг на директория с неуникално име:
Код
GeSHi (Bash):
  1. user@rechner:/var/spool/asterisk/voicemail> fcd altern
  2. 1) /etc/alternatives
  3. 2) /var/lib/dpkg/alternatives
  4. #? 1
  5. user@rechner:/etc/alternatives>
  6.  

А ето и как може да се реализира:

Търсенето се осъществява в предварително създаден файл-списък на всички директории на файловата система (маунтнати естествено). За тази цел ни трябва следния скрипт:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. find / -type d 2> /dev/null | sort > /var/tmp/dirs
  3.  
Може да го запазите на пример като /usr/local/bin/dirlocate  и да го вкарате в  cron.daily или cron.weekly или crontab и т.н. От това зависи актуализирането на списъка на директориите.

Естествено всеки може да си промени търсенето както си иска. На пример да изключим директориите от бекап-а :
Код
GeSHi (Bash):
  1. find / -type d -path /mnt/backup -prune -o -print 2> /dev/null | sort > /var/tmp/dirs
  2.  

Ето и самата bash-функция, която се копира в .bashrc или друг скрипт, който се изпълнява при логин.
Код
GeSHi (Bash):
  1. function fcd () {
  2.    dirdat="/var/tmp/dirs"
  3.    suche=$1
  4.    if [ -n "$suche" ]; then
  5.        # Internal Field Separator wg. moegl. Leerzeichen in Verz.namen umbiegen
  6.        IFSOLD=$IFS
  7.        IFS=$(echo -en "\n\t");
  8.        # erste Suche nach exakten Treffern
  9.        dirs=$(grep -i -E \/$suche$ $dirdat)
  10.        set -f; set -- $dirs; set +f; anz=$#
  11.        # grosszuegiger suchen, wenn kein Ergebnis
  12.        if [ $anz -eq 0 ]; then
  13.            dirs=$(grep -i -E \/.*$suche[^/]*$ $dirdat)
  14.            set -f; set -- $dirs; set +f; anz=$#
  15.        fi
  16.        case $anz in
  17.            0)
  18.                ;;
  19.            1)
  20.                cd $dirs
  21.                ;;
  22.            *)
  23.                select v in $dirs; do
  24.                    cd $v;
  25.                    break;
  26.                done
  27.                ;;
  28.        esac
  29.        IFS=$IFSOLD
  30.    fi
  31. }
  32.  
[/code]
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Re: Комфортно cd
« Отговор #1 -: May 07, 2009, 18:36 »
Интересно :)
Активен

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Re: Комфортно cd
« Отговор #2 -: May 07, 2009, 21:03 »
Готино  [_]3 ама бавно за моите
var/tmp $ count --lines dirs
   lines
 1459986 dirs
Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

sharan4o

  • Напреднали
  • *****
  • Публикации: 125
    • Профил
Re: Комфортно cd
« Отговор #3 -: May 07, 2009, 21:46 »
@victim70

Respect

Активен