Bash: come visualizzare il nome della prima directory che contiene un determinato file
Domanda
Ho questo:
ls */file
dir1/file dir2/file dir3/file
.
Ma ho bisogno di solo il primo nome directory, come questo: dir1
Ho fatto questo:
IFS="/" read foo bar <<< "$(ls */file 2>/dev/null)"
echo $foo
dir1
.
E funziona, ma ora ho un problema con l'espansione subshell
su ssh
.C'è un modo più elegante (senza subshells
o sed
) per farlo?
In caso contrario, posterò quindi una domanda riguardante un problema completamente diverso - Espansione subshells
ssh
.
Soluzione
for F in */file; do
D=${F%%/*}
break
done
.
un altro:
F=(*/file); D=${F%%/*}
. Altri suggerimenti
Prova
ls */file | cut -d"/" -f1
.
Utilizzare /
come separatore.
Puoi usare le quinte preventive ingannevoli! Come così:
LIST=`ls */file`
echo "$LIST" | cut -d/ -f1
.
o
echo "$LIST" | awk -F/ {'print $1'}
. È possibile utilizzare il Bollettino Leggi incorporato con opzione -d
:
read -d '/' a < <(echo */file)
echo "$a"
dir1
. Se hai solo bisogno del nome della cartella che puoi usare:
$ls -1 | awk 'NR==n'
.
Dove n=1
è la prima directory, è possibile modificare il valore di n
per ottenere la directory NTH.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow