LoginSignup
0
0

More than 1 year has passed since last update.

wsl2でfzf_cdrを使ってonedrive上のファイルにアクセスするときに困ったこと

Last updated at Posted at 2021-12-25

はじめに

wsl2もfzfも便利ですよね。
特にfzfはcdrと組み合わせて履歴からディレクトリ移動できるようになると、ディレクトリ移動が爆速になります。

※参考
https://www.rasukarusan.com/entry/2018/08/14/083000

# fzf-cdr 
alias cdd='fzf-cdr'
function fzf-cdr() {
    target_dir=`cdr -l | sed 's/^[^ ][^ ]*  *//' | fzf`
    target_dir=${target_dir/\~/$HOME}
    if [ -n "$target_dir" ]; then
        cd $target_dir
    fi
}

ただ、これには問題があり、名前にスペースがあるディレクトリに移動しようとすると
no such file or directory:
と怒られてしまいます。

名前にスペースがあるディレクトリなんて作らなければいいじゃんと思うのですが、、、
会社などの組織で利用しているOneDriveと同期させたフォルダは"OneDrive - 組織名"となってしまい、スペースが入ってしまいます。
私は頻繁にwsl2からOneDrive上のフォルダにアクセスするのでfzf-cdrできないのは手間です。

調査

# スペース入りのディレクトリを作成しみる。
mkdir test1\ 2

# cdで入ってみる。
cd test1\ 2
# OK

dir='test1\ 2'
cd $dir
# NG

dir='test1 2'
cd $dir
# OK

どうやら、cdに直接打ち込む場合はスペースの前にエスケープが入りますが、
変数で指定する場合はエスケープは不要のようです。

解決策

# 修正後
# fzf-cdr 
alias cdd='fzf-cdr'
function fzf-cdr() {
    target_dir=`cdr -l | sed 's/^[^ ][^ ]*  *//' | fzf`
    target_dir=${target_dir/\~/$HOME}
   target_dir=${target_dir//\\/}
    if [ -n "$target_dir" ]; then
        cd $target_dir
    fi
}

解決策としては、単純ですがエスケープを取り除く処理を一文つけたしました。
これでちゃんと、wsl2からOnedrive上のフォルダにアクセスできるようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0