バッシュ:特定のファイルを含む最初のディレクトリの名前を表示する方法
質問
私はこれを持っています:
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 番目のディレクトリを取得します。
所属していません StackOverflow