Advertisement
Guest User

tags+

a guest
Jul 12th, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.99 KB | None | 0 0
  1. #!/bin/bash
  2. #Name file:/usr/lib/mc/extfs.d/tags+
  3. #Плагин для midnight commander для работы с программой tags "https://github.com/liuch/tags"
  4.  
  5. #alpha version
  6.  
  7. #Сохранить файл как /usr/lib/mc/extfs.d/tags+
  8. #Добавить в mc.ext раньше объявления .info файлов. Чтоб меньше морочится, добавте в начало
  9. #regex/tags\.info$
  10. #   Open=%cd %p/tags://
  11. #Запускать путем активации файла tags.info
  12. #Создавать новую базу можно путем ввода в текущей папке "tags -c" после чего можно работать с тегами.
  13.  
  14. LANG=C
  15. export LANG
  16.  
  17. if [[ ! $(which tags) ]];then exit 1;fi
  18.  
  19. error(){
  20.     echo "wrong tag"
  21.     return 1
  22.     }
  23.  
  24. tags_list() {
  25.     arch=$1
  26.     taglist=$(tags -p |sed "s/^ *//g"|cut -f1)
  27.     taglistdir=$(echo "$taglist"|sed "s|=|/|")
  28.     user=$(whoami)
  29.     rules="drwxrwxr-x"
  30.     date=$(date +"%b %d %H:%M")
  31.     for i in $taglist; do
  32.         if [[ ! $(echo $i|cut -f2 -d=) ]]; then continue; fi
  33.         b=$(echo "$i"|sed "s|=|/|")
  34.         echo "$rules 1 $user $user 4 $date $b"
  35.         files_tags=$(tags -l -w $i)
  36.         for d in $files_tags;do
  37.             raw=$(ls -l $d --time-style=+"%b %d %H:%M"| sed "s/  */ /g")
  38.             sizef=$(echo "$raw"|cut -f5 -d" ")
  39.             rulesf=$(echo "$raw"|cut -f1 -d" ")
  40.             userf=$(echo "$raw"|cut -f3 -d" ")
  41.             groupf=$(echo "$raw"|cut -f4 -d" ")
  42.             datef=$(echo "$raw"|cut -f6,7,8 -d" ")
  43.             echo "$rulesf 2 $userf $groupf $sizef $datef $b/$d"
  44.         done
  45.     done
  46.    
  47. }
  48.  
  49. copyin(){
  50.     arch=$1
  51.     filename=$2
  52.     source=${@:3}
  53.     echo $filename>/tmp/tags
  54.     echo $source>>/tmp/tags
  55.     echo $arch>>/tmp/tags
  56.     if [[ $(dirname $filename) == "." ]]
  57.         then return 1
  58.         else
  59.             if [[ $(expr index $(dirname $filename) "/") -gt 0 ]]
  60.                 then tag=$(echo "$(dirname $filename|sed "s|/|=|")")
  61.                 else tag=$(dirname $filename)=
  62.             fi
  63.             tags -a $tag $(dirname "$arch")/$(basename $filename) >/dev/null 2>&1
  64.     fi
  65. }
  66.  
  67. copyout(){
  68.     arch=$1
  69.     filename=$2
  70.     dest=$3
  71.     cp $(dirname "$arch")/$(basename $filename) $dest >/dev/null 2>&1
  72.    
  73. }
  74.  
  75. file_rm() {
  76.     archive=$1
  77.     filename=$2
  78.     if [[ $(expr index $(dirname $filename) "/") -gt 0 ]]
  79.         then tag=$(echo "$(dirname $filename|sed "s|/|=|")")
  80.         else tag=$(dirname $filename)
  81.     fi
  82.     tags -d $tag $(dirname "$arch")/$(basename $filename) >/dev/null 2>&1
  83. }
  84.  
  85. dir_rm() {
  86.     arch=$1
  87.     filename=$2
  88.     if [[ $(expr index $(dirname $filename) "/") -gt 0 ]]
  89.         then tag=$(echo "$(dirname $filename|sed "s|/|=|")")
  90.         else tag=$(dirname $filename)
  91.     fi
  92.     tags -d $tag $(dirname "$arch")/* >/dev/null 2>&1
  93. }
  94.  
  95. tags_run() {
  96.     arch=$1
  97.     filename=$2
  98.    
  99. }
  100.  
  101. mkdir() {
  102.     arch=$1
  103.     filename=$2
  104.    
  105. }
  106.  
  107.  
  108. umask 077
  109.  
  110. cmd="$1"
  111. shift
  112.  
  113. case "$cmd" in
  114.   list)    tags_list    "$@" ;;
  115.   rm)      file_rm      "$@" ;;
  116.   rmdir)   dir_rm      "$@" ;;
  117.   mkdir)   mkdir   "$@" ;;
  118.   copyin)  copyin  "$@" ;;
  119.   copyout) copyout "$@" ;;
  120.   run) tags_run "$@" ;; #не работает без правильного copyout
  121.   *) exit 1 ;;
  122. esac
  123. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement