Midnight Commander

MC - Midnight Commander - manager plików. Odpowiednik Norton Commandera. Jest to manager plików, który dzięki możliwości podpięcia własnych skryptów w menu użytkownika, z plikami może zrobić niemal wszystko. Przykładowy plik menu znajduje się poniżej.

Skrinszoty

810x710 604x490

Pliki konfiguracyjne

Aby uzyskać przeźroczystość w MC, dodaj do swojego pliku ~/.mc/ini linie:

[Colors]
base_color=normal=default,default:directory=white,default:marked=yellow,default:link=default,default:executable=green,default:device=magenta,default:special=blue,default:errors=white,red:reverse=green,default:gauge=green,white:input=brightyellow,yellow:selected=brightgreen,green:markselect=yellow,green:dnormal=brightgreen,green:dfocus=black,lightgreen:dhotnormal=yellow,red:dhotfocus=yellow,lightgreen:menu=black,green:menuhot=red,green:menusel=yellow,red:menuhotsel=red,black:core=,black

Mój plik ~/.mc/menu - rozbudowałem obsługę archiwów19-05-2007

shell_patterns=0

#----------------------------------
# przyjęte oznaczenia:
#----------------------------------
#
# mala litera - wynik akcji w tym samym okienku
# duza litera - wynik w okienku obok
# wyjatki: t,T,&,R,Z
#----------------------------------

+ ! t t
@       Uruchom jako...
        CMD=%{wpisz polecenie (na koncu bedzie nazwa pliku)}
        $CMD %f

+ t t
@       Wykonaj polecenie na zaznaczonych plikach.
        set %t; CMD=%{Enter command}
        while [ -n "$1" ]; do
          $CMD "$1"
          shift
        done

=+ f \.1$ | f \.3$ | f \.4$ | f \.5$ | f \.6$ | f \.7$ | f \.8$ | f \.man$ & t r
1       Display the file with roff -man
        nroff -man %f | less


#----------------------------------
# ARCHIWA
#----------------------------------
+ t d & ! t t
t       TAR:   Kompresuj katalog do tar.gz
        tar -zvcf %f.tar.gz %f
        echo
        echo " PRZED: `du -bh %f | tail -n 1`"
        echo "    PO: `du -bh %f.tar.gz`"

+ t d & ! t t
T       TAR:   Kompresuj katalog do tar.bz2
        tar -jvcf %f.tar.bz2 %f
        echo
        echo " PRZED: `du -bh %f | tail -n 1`"
        echo "    PO: `du -bh %f.tar.bz2`"

#----------------------------------
+ t t
t       TAR:   Dodaj zaznaczone pliki/katalogi do tar.gz
        PWD=`basename "%d" /`
        echo -n " Nazwa archiwum (bez rozszerzenia) [$PWD]: "
        read arch
        if [ "$arch" == "" ]; then arch="$PWD"; fi
        tar -zvcf "./$arch.tar.gz" %t
        echo
        echo " PRZED: `du -bch %t | tail -n 1`"
        echo "    PO: `du -bh \"./$arch.tar.gz\"`"

+ t t
T       TAR:   Dodaj zaznaczone pliki/katalogi do tar.bz2
        PWD=`basename "%d" /`
        echo -n " Nazwa archiwum (bez rozszerzenia) [$PWD]: "
        read arch
        if [ "$arch" == "" ]; then arch="$PWD"; fi
        tar -jvcf "./$arch.tar.bz2" %t
        echo
        echo " PRZED: `du -bch %t | tail -n 1`"
        echo "    PO: `du -bh \"./$arch.tar.bz2\"`"

#----------------------------------
=+ f \.tar\.gz$ | f \.tgz$ | f \.tar\.bz2$ | f \.tar$ & t r & ! t t
x       TAR:   Rozpakuj archiwum do PODkatalogu
        unset D
        set gzip -cd
        case %f in
                *\.tar\.gz)  D="`basename %f .tar.gz`"; break;;
                *\.tgz)     D="`basename %f .tgz`";    break;;
                *\.tpz)     D="`basename %f .tpz`";    break;;
                *\.tar\.Z)   D="`basename %f .tar.Z`";  break;;
                *\.tar\.z)   D="`basename %f .tar.z`";  break;;
                *\.tar\.bz2) D="`basename %f .tar.bz2`"; set bunzip2 -c ;break;;
                *\.tar\.F)   D="`basename %f .tar.F`"; set freeze -dc;break;
        esac
        mkdir $D; cd $D && ($1 $2 ../%f | tar xvf -)

=+ f \.tar\.gz$ | f \.tgz$ | f \.tar\.bz2$ | f \.tar$ & t r & ! t t
X       TAR:   Rozpakuj archiwum do okienka obok
        unset EXT
        case %f in
                *\.tar\.bz2)  EXT=tar_bz2;     break;;
                *\.tar\.gz)   EXT=tar_gz;       break;;
                *\.tgz)               EXT=tar_gz;  break;;
                *\.tar)               EXT=tar;     break;;
        esac
        if [ "$EXT" = "tar_bz2" ]; then
                tar -jxvf %f -C %D
        elif [ "$EXT" = "tar_gz" ]; then
                tar -zxvf %f -C %D
        elif [ "$EXT" = "tar" ]; then
                tar -xvf %f -C %D
        fi

+ f \.tar\.gz$ | f \.tgz$ | f \.tar\.bz2$ | f \.tar$ & t r & t t
x       TAR:   Rozpakuj zaznaczone archiwa do PODkatalogów
        for i in %t
        do
                set gzip -dc
                unset D
                case $i in
                        *\.tar.gz)   D="`basename $i .tar.gz`";        break;;
                        *\.tgz)              D="`basename $i .tgz`";             break;;
                        *\.tpz)              D="`basename $i .tpz`";             break;;
                        *\.tar\.Z)   D="`basename $i .tar.Z`"; break;;
                        *\.tar\.z)   D="`basename $i .tar.z`"; break;;
                        *\.tar\.F)   D="`basename $i .tar.F`"; set freeze -dc; break;;
                        *\.tar\.bz2) D="`basename $i .tar.bz2`"; set bunzip2 -c;     break;;
                esac
                mkdir $D; (cd $D && $1 $2 ../$i | tar xvf -)
        done

=+ f \.tar\.gz$ | f \.tgz$ | f \.tar\.bz2$ | f \.tar$ & t r & t t
X       TAR:   Rozpakuj zaznaczone archiwa do okienka obok
        set %t
        while [ -n "$1" ]
        do
                unset EXT
                case "$1" in
                        *\.tar\.bz2) EXT=tar_bz2;    break;;
                        *\.tar\.gz)  EXT=tar_gz;      break;;
                        *\.tgz)              EXT=tar_gz; break;;
                        *\.tar)              EXT=tar;    break;;
                esac
                if [ "$EXT" = "tar_bz2" ]; then
                        tar -jxvf "$1" -C %D
                elif [ "$EXT" = "tar_gz" ]; then
                        tar -zxvf "$1" -C %D
                elif [ "$EXT" = "tar" ]; then
                        tar -xvf "$1" -C %D
                fi
                shift
        done

#----------------------------------
+ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t
c       Konwersja: gz<->bz2, tar.gz<->tar.bz2, tgz->tar.bz2
        unset D
        unset EXT
        case %f in
                *\.tgz)       EXT=tgz;      break;;
                *\.tpz)       EXT=tpz;      break;;
                *\.Z) EXT=Z;          break;;
                *\.z) EXT=z;          break;;
                *\.gz)        EXT=gz;                break;;
                *\.bz2)       EXT=bz2;      break;;
        esac
        case $EXT in
                tgz|tpz)      D="`basename %f .$EXT`.tar"; break;;
                gz|Z|z)               D="`basename %f .$EXT`";     break;;
                bz2)          D="`basename %f .bz2`";         break;;
        esac
        if [ "$EXT" = "bz2" ]; then
                bunzip2 -v %f ; gzip -f9 -v $D
        else
                gunzip -v %f ; bzip2 -v $D
        fi

+ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & t t
c       Konwersja zaznaczonych: gz<->bz2, tar.gz<->tar.bz2, tgz->tar.bz2
        set %t
        while [ -n "$1" ]
        do
                unset D
                unset EXT
                case $1 in
                        *\.tgz)      EXT=tgz;break;;
                        *\.tpz)      EXT=tpz;break;;
                        *\.Z)        EXT=Z; break;;
                        *\.z)        EXT=z; break;;
                        *\.gz)       EXT=gz;       break;;
                        *\.bz2)      EXT=bz2;break;;
                esac
                case $EXT in
                        tgz) D="`basename $1 .tgz`.tar";     break;;
                        tpz) D="`basename $1 .tpz`.tar";     break;;
                        gz|Z|z)      D="`basename $1 .$EXT`";     break;;
                        bz2) D="`basename $1 .bz2`";         break;;
                esac
                if [ "$EXT" = "bz2" ]; then
                        bunzip2 -v $1
                        gzip -f9 -v $D
                else
                        gunzip -v $1
                        bzip2 -v $D
                fi
                shift
        done

#----------------------------------
+ t r & ! t t
g       GZip:  Spakuj/rozpakuj plik
        unset DECOMP
        case %f in
                *\.gz) DECOMP=-d;;
                *\.[zZ]) DECOMP=-d;;
        esac
        gzip $DECOMP -v %f

+ t r & t t
g       GZip:  Spakuj/rozpakuj zaznaczone pliki
        for i in %t
        do
                unset DECOMP
                case $i in
                        *\.gz) DECOMP=-d;;
                        *\.[zZ]) DECOMP=-d;;
                esac
                gzip $DECOMP -v $i
        done

#----------------------------------
+ t r & ! t t
b       BZip2: Spakuj/rozpakuj plik
        unset DECOMP
        case %f in
                *\.bz2) DECOMP=-d;;
        esac
        bzip2 $DECOMP -v %f

+ t r & t t
b       BZip2: Spakuj/rozpakuj zaznaczone pliki
        for i in %t
        do
                unset DECOMP
                case $i in
                        *\.bz2) DECOMP=-d;;
                esac
                bzip2 $DECOMP -v $i
        done

#----------------------------------
+ ! t t
7       7zip:  Spakuj/rozpakuj plik/katalog
        unset CMD
        case %f in
                *\.7[Zz]) 7zr x %f;;
                *)
                        7zr a -mx=9 %f.7z %f
                        echo
                        echo " PRZED: `du -bh %f | tail -n 1`"
                        echo "    PO: `du -bh %f.7z`"
        esac

+ t t
7       7zip:  Spakuj/rozpakuj zaznaczone pliki/katalogi
        for i in %t
        do
                case $i in
                        *\.7[Zz]) 7zr x "$i" && rm -r "$i";;
                        *)   7zr a -r -mx=9 "$i.7z" "$i" && rm -r "$i"
                esac
        done

+ t t
&       7zip:  Dodaj zaznaczone pliki/katalogi do archiwum
        PWD=`basename "%d" /`
        echo -n " Nazwa archiwum (bez rozszerzenia) [$PWD]: "
        read arch
        if [ "$arch" == "" ]; then arch="$PWD"; fi
        7zr a -mx=9 "./$arch.7z" %t
        echo
        echo " PRZED: `du -bch %t | tail -n 1`"
        echo "    PO: `du -bh \"./$arch.7z\"`"

#----------------------------------
+ f \.7[Zz] | f \.[Zz][Ii][Pp] & t r & ! t t
a       AdvZip: Repakuj plik
        advzip -z -4 %f

+ f \.7[Zz] | f \.[Zz][Ii][Pp] & t r & t t
a       AdvZip: Repakuj zaznaczone pliki
        advzip -z -4 %t

#----------------------------------
=+ f \.[Rr][a0-9][r0-9]$ & ! t t
X       RAR:   Rozpakuj archiwum do okienka obok
        rar x %f %D

+ ! t t
r       RAR:   Spakuj/rozpakuj plik/katalog
        case %f in
                *\.[Rr][Aa][Rr])      rar x %f;;
                *\.[Rr][0-9][0-9])    rar x %f;;
                *)
                        rar a -r -m5 %f.rar %f
                        echo
                        echo " PRZED: `du -bh %f | tail -n 1`"
                        echo "    PO: `du -bh %f.rar`"
                        ;;
        esac

+ t t
r       RAR:   Spakuj/rozpakuj zaznaczone pliki/katalogi
        for i in %t
        do
                case $i in
                        *\.[Rr][Aa][Rr])             rar x "$i" && rm -r "$i";;
                        *\.[Rr][0-9][0-9])   rar x "$i" && rm -r "$i";;
                        *)   rar a -r -m5 "$i.rar" "$i" && rm -r "$i"
                esac
        done

+ t t
R       RAR:   Dodaj zaznaczone pliki/katalogi do archiwum
        PWD=`basename "%d" /`
        echo -n " Nazwa archiwum (bez rozszerzenia) [$PWD]: "
        read arch
        if [ "$arch" == "" ]; then arch="$PWD"; fi
        rar a -r -m5 "./$arch.rar" %t
        echo
        echo " PRZED: `du -bch %t | tail -n 1`"
        echo "    PO: `du -bh \"./$arch.rar\"`"


#----------------------------------
=+ f \.[Zz][Ii][Pp]$ & ! t t
X       ZIP:   Rozpakuj archiwum do okienka obok i skasuj je
        unzip %f -d %D && rm %f

=+ f \.[Zz][Ii][Pp]$ & t t
X       ZIP:   Rozpakuj zazn. archiwa do okienka obok i skasuj je
        for i in %t
        do
                unzip "$i" -d %D && rm "$i"
        done

+ ! t t
z       ZIP:   Spakuj/rozpakuj plik/katalog
        unset DECOMP
        case %f in
                *\.[Zz][Ii][Pp]) unzip %f;;
                *)
                        zip -9 -r %f.zip %f
                        echo
                        echo " PRZED: `du -bh %f | tail -n 1`"
                        echo "    PO: `du -bh %f.zip`"
                        ;;
        esac

+ t t
z       ZIP:   Spakuj/rozpakuj zaznaczone pliki/katalogi
        for i in %t
        do
                unset DECOMP
                case $i in
                        *\.[Zz][Ii][Pp]) unzip "$i" && rm -r "$i";;
                        *)   zip -9 -r "$i.zip" "$i" && rm -r "$i"
                esac
        done

+ t t
Z       ZIP:   Dodaj zaznaczone pliki/katalogi do archiwum
        PWD=`basename "%d" /`
        echo -n " Nazwa archiwum (bez rozszerzenia) [$PWD]: "
        read arch
        if [ "$arch" == "" ]; then arch="$PWD"; fi
        zip -9 -r "./$arch.zip" %t
        echo
        echo " PRZED: `du -bch %t | tail -n 1`"
        echo "    PO: `du -bh \"./$arch.zip\"`"



#----------------------------------
# INNE
#----------------------------------
= f \.c$ & t r
+ f \.c$ & t r & ! t t
5       Kompiluj i linkuj zaznaczony plik .c
        make `basename %f .c` 2>/dev/null || cc -O -o `basename %f .c` %f

#----------------------------------
+ t r & ! t t
j       Dołącz plik do tego w drugim oknie
        cat %f >>%D/%f

+ t t
j       Dołącz pliki do odpowiedników w drugim oknie
        set %t
        while [ -n "$1" ]; do
          cat $1 >>%D/$1
          shift
        done

#----------------------------------
+ t t
s       Oblicz zajmowaną przestrzeń przez zaznaczone
        du -bch %t | less

+ t d
s       Oblicz zajmowaną przestrzeń przez katalog
        du -bch %f | less

#----------------------------------
+ t r & ! t t
d       Skasuj plik jeżeli jest też w drugim oknie
        if [ "%d" = "%D" ]; then
                echo "BLAD: Okna muszą zawierać różne katalogi!"
                exit 1
        fi
        if [ -f %D/%f ]; then                  # w drugim oknie plik o takiej samej nazwie
                if cmp -s %D/%f %f; then      # sprawdz czy to ten sam plik
                        rm %f && echo Plik w okienku obok jest taki sam, kasuje %f
                else
                        echo "Pliki %f oraz %D/%f ROZNIA sie, NIE kasuje!"
                fi
        else
                echo Plik %f nie ma odpowiednika w okienku obok
        fi

+ t r & t t
d       Skasuj zazn. pliki jeżeli istnieją w drugim oknie
        if [ "%d" = "%D" ]; then
                echo "BLAD: Okna muszą zawierać różne katalogi!"
                exit 1
        fi
        set %t
        while [ -n "$1" ]; do
                if [ -f %D/$1 ]; then
                        if [ "`sum $1`" == "`sum %D/$1`" ]; then
                                rm $1 && echo DUPLIKAT: $1
                        else
                                echo ROZNE: $1 i %D/$1
                        fi
                else
                        echo JEDYNAK: %f
                fi
                shift
        done
        echo "Wszystkie pliki oznaczone jako DUPLIKAT zostały skasowane!"

#----------------------------------
= f \.tex$ & t r
+ f \.tex$ & t r & ! t t
l       Run latex on file and show it with xdvi
        latex %f && xdvi `basename %f .tex`.dvi

=+ f ^part | f ^Part | f uue & t r
+ t t
U       Uudecode marked news articles (needs work)
        set %t
        (
        while [ -n "$1" ]; do # strip headers
          FIRST=`awk '{print $1 ; exit}' $1`
          cat $1 | sed '/^'"$FIRST"' /,/^$/d'; shift
        done
        ) |sed '/^$/d' |sed -n '/^begin 6/,/^end$/p' | uudecode
        if [ "$?" != "0" ]; then
          echo "Cannot decode %t"
        fi
        echo "Please test the output file before deleting anything"

#----------------------------------
# VIM
#----------------------------------
+ t r & ! t t
v       Otworz plik w VIM
        vim %f

+ t r & ! t t
V       Otworz plik w gVIM
        gvim %f

+ t r & t t
v       Otworz zaznaczone pliki w VIM
        vim -p %t

+ t r & t t
V       Otworz zaznaczone pliki w gVIM
        gvim -p %t

#----------------------------------
# MOC player
#----------------------------------
=+ f \.[Mm][Pp][3Cc]$ | f \.[Ww][Aa][Vv]$ | f \.[Oo][Gg][Gg]$ | f \.[Ff][Ll][Aa][Cc]$ | f \.[Aa][Uu]$ & ! t t
m       Dodaj plik do playlisty MOC playera
        mocp -y -a %d/%p
#p       Odtwarzaj plik w MOC playerze
#       mocp -c -a -p %d/%p
+ f \.[Mm][Pp][3Cc]$ | f \.[Ww][Aa][Vv]$ | f \.[Oo][Gg][Gg]$ | f \.[Ff][Ll][Aa][Cc]$ | f \.[Aa][Uu]$ & t t
m       Dodaj zaznaczone pliki do playlisty MOC playera
        set %t
        cd %d
        while [ -n "$1" ]; do
                mocp -y -a "`echo %d`/$1"
                shift
        done

+ t d
M       Przegladaj katalog w MOC player
        mocp -m %f

#----------------------------------
# mplayer
#----------------------------------
+ ! t t
m       Otworz w mplayer
        cd %d
        mplayer %f

+ t t
m       Otworz zaznaczone kolejno w mplayer
        cd %d
        mplayer %t

#----------------------------------
# qmv
#----------------------------------
+ t t
q       Edytuj nazwy zaznaczonych plików
        cd %d
        qmv %t
#----------------------------------
# gliv
#----------------------------------
+ t t
Q       Otwórz zaznaczone w przeglądarce GLIV
        gliv %t

#----------------------------------
# OpenGPG
#----------------------------------

+ t r & ! t t & ! f \.gpg$
1       Zaszyfruj plik domyślnym kluczem i usuń zrodlo
        gpg -i --encrypt %f && rm %f

+ t r & ! t t & ! f \.gpg$
!       Zaszyfruj plik (na haslo) i usuń zrodlo
        gpg -i --symmetric %f && rm %f

+ t r & t t
1       Zaszyfruj zaznaczone pliki domyslnym kluczem
        gpg -i --encrypt-files %t

=+ t r & ! t t & f \.gpg$
1       Deszyfruj plik i usun niezaszyfrowany
        gpg -i --multifile --decrypt %f && rm %f

=+ t r & t t & f \.gpg$
1       Deszyfruj zaznaczone pliki
        gpg -i --multifile --decrypt %t

#----------------------------------
+ t r & ! t t & ! f \.sig$ & ! f \.asc$
2       Podpisz plik (sygnatura w pliku .sig)
        gpg -i --detach-sign %f

+ t r & ! t t & ! f \.sig$ & ! f \.asc$
2       Podpisz plik (sygnatura w pliku .asc)
        gpg -i --detach-sign --armor %f

=+ t r & ! t t & f \.sig$ | f \.asc$ | f \.gpg$
2       Sprawdź podpis
        gpg --verify %f

+ t r & ! t t
3       Podpisz plik
        gpg -i --sign %f
Autor: Piotr 'POX' Ożarowski. Napisano w VIM na Debian GNU/Linux
Valid HTML! Valid CSS!

19-05-2007