私の.csvファイルを見つけて、そのディレクトリにcdしようとしています。
find Documents/notes -type f -name "*.csv" | head -1 | xsel -b
これにより、ファイルの最初のディレクトリがクリップボードにコピーされ、それを実行しようとします。
cd $(xsel -b)
しかし、もちろん、ディレクトリではなくファイル名が含まれているので、そうすることはできません。
ファイル名を省略する方法はありますか?もっと良い方法がありますか?
ベストアンサー1
bash
シェルを使用して**
パターンをアクティブにし(match、パス名の過去*
にも到達)、パターンを展開して一致する最初のディレクトリに移動します。/
Documents/notes/**/*.csv
cd
shopt -s globstar
set -- Documents/notes/**/*.csv
cd "$(dirname "$1")" # or: cd "${1%/*}"
デフォルトでは、このモードがzsh
すでに有効になっている場合は、次のように短縮できます。**
cd Documents/notes/**/*.csv([1]:h)
glob修飾子は、([1]:h)
指定されたパターンに対して最初に一致するディレクトリ名(「パスヘッダー」と同様に「h」)を返します。(.[1]:h)
パターンが通常のファイル(またはそのファイルへのシンボリックリンク)とのみ一致するようにこの修飾子を変更します。