ファイル名自体なしでファイルパスを取得する方法

ファイル名自体なしでファイルパスを取得する方法

私の.csvファイルを見つけて、そのディレクトリにcdしようとしています。

find Documents/notes -type f -name "*.csv" | head -1 | xsel -b

これにより、ファイルの最初のディレクトリがクリップボードにコピーされ、それを実行しようとします。

cd $(xsel -b) 

しかし、もちろん、ディレクトリではなくファイル名が含まれているので、そうすることはできません。

ファイル名を省略する方法はありますか?もっと良い方法がありますか?

ベストアンサー1

bashシェルを使用して**パターンをアクティブにし(match、パス名の過去*にも到達)、パターンを展開して一致する最初のディレクトリに移動します。/Documents/notes/**/*.csvcd

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)パターンが通常のファイル(またはそのファイルへのシンボリックリンク)とのみ一致するようにこの修飾子を変更します。

おすすめ記事