Bash: come visualizzare il nome della prima directory che contiene un determinato file

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

  •  21-12-2019
  •  | 
  •  

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.

È stato utile?

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
scroll top