バッシュ:特定のファイルを含む最初のディレクトリの名前を表示する方法

StackOverflow https://stackoverflow.com//questions/24053725

  •  21-12-2019
  •  | 
  •  

質問

私はこれを持っています:

ls */file
dir1/file dir2/file dir3/file

ただし、次のように最初のディレクトリ名だけが必要です。 dir1

これは私がしました:

IFS="/" read foo bar <<< "$(ls */file 2>/dev/null)"
echo $foo
dir1

それは機能しますが、今問題が発生しています subshell 以上の拡張 ssh. 。もっとエレガントな方法はありますか( subshells または sed) これをする?

そうでない場合は、まったく別の問題に関する質問を投稿します。 subshells 以上 ssh.

役に立ちましたか?

解決

for F in */file; do
    D=${F%%/*}
    break
done

別の:

F=(*/file); D=${F%%/*}

他のヒント

試す

ls */file | cut -d"/" -f1

使用 / セパレータとして。

扱いにくい二重引用符も使用できます。そのようです:

LIST=`ls */file`
echo "$LIST" | cut -d/ -f1

または

echo "$LIST" | awk -F/ {'print $1'}

組み込みの既読通知を使用できます。 -d オプション:

read -d '/' a < <(echo */file)
echo "$a"
dir1

フォルダーの名前だけが必要な場合は、次のように使用できます。

$ls -1 | awk 'NR==n'

どこ n=1 が最初のディレクトリである場合、値を変更できます n n 番目のディレクトリを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top