さまざまなバージョンのカタログバックアップを閲覧する最良の方法

さまざまなバージョンのカタログバックアップを閲覧する最良の方法

rsyncバックアップスクリプトを使用しています(ここを参照:https://codereview.stackexchange.com/questions/29429/push-backup-script) 次のディレクトリが作成されます。

back-2015-07-02T21_18_01

zshそれでは、コマンドライン()にあり、に/path/to/my/backup/back-2015-07-02T21_18_01/home/myuser/myfiles/somedir/subdir/切り替えたいとしましょう/path/to/my/backup/back-2016-04-02T21_17_01/home/myuser/myfiles/somedir/subdir/

最速/最も良い方法は何ですかzsh?私は主にzshメニュー補完機能を使用しているので、メニュータブ補完機能を使用して別の日付を選択できますが、現在のサブディレクトリは維持したいと思います(他のバックアップ日付でのみ可能です)。

答え1

あるディレクトリコンポーネントを別のディレクトリコンポーネントに置き換える1つの方法zshは、2つのパラメータバージョンを使用することですcd

cd old new

これはnew最初の部分文字列の一致を置き換えold、ディレクトリを結果パスに変更しようとします。たとえば、

% pwd
/path/to/my/backup/back-2015-07-02T21_18_01/home/myuser/myfiles/somedir/subdir/
% cd "5-07-02T21_18_01" "6-04-02T21_17_01"
/path/to/my/backup/back-2016-04-02T21_17_01/home/myuser/myfiles/somedir/subdir/
% pwd
/path/to/my/backup/back-2016-04-02T21_17_01/home/myuser/myfiles/somedir/subdir/

検索と置換は完全に文字列レベルで行われ、置換は常に最初の一致でのみ行われます。したがって、存在する場合、/foo/foo/foo/fooランタイムは実際に存在するかどうかにかかわらず、cd foo bar常にディレクトリをに変更しようとします。たとえ存在しても、そのような代替物を探すことはないだろう。/bar/foo/foo/foo/foo/foo/bar/foo

2番目の引数の補完機能はで提供されていますが、1番目の引数compinitは少なくともデフォルトの補完設定を使用して入力する必要があります。compinit何らかの理由で有効になっていない場合は、実行して追加することautoload -U compinit; compinit~/.zshrc変更できます。

ノート:文字列のcd新しい文字をサポートします。つまり、を実行して切り替えることができます。しかし、この場合は完成しないようですので、2番目の引数も直接入力する必要があります。/old/a/b/c/d/x/y/z/c/dcd a/b x/y/z

答え2

私は実用的で好きでzsh完成を書くことは現在の技術範囲を超えているので、selectzsh(とbashの)メニューシステムを使って特別な目的の機能を書いています。

cdd(){
    typeset dir
    typeset -a dirs
    if [[ $PWD =~ ^(.*)(/back-[0-9-]+T[0-9_]+/)(.*)$ ]]
    then    for dir in "$match[1]"/*/"$match[3]"
            do      [ "$dir" != "$PWD"  -a  -d "$dir" ] && dirs+=("$dir")
            done
            select dir in "$dirs[@]"
            do      echo "$dir"
                    cd "$dir"
                    break
            done
    else    echo "no date in $PWD"
    fi
}

これは現在のディレクトリを日付パターンを使用してディレクトリを囲む3つの部分に分割し、globsに置き換えます*。結果のリストはzshで提供されており、1) ... 2) ...1または2を入力してディレクトリに移動できるスタイルメニューがあります。

関連情報