Domanda

Vorrei aggiungere del testo semplice in alcuni file.Nello specifico, lo faccio sui driver lpfc di Linux:

ls -1 /sys/class/scsi_host/host* | awk -F '@' '{system("echo 0x0 > "$1"/lpfc_log_verbose")}'

Ma pensando a casi comuni ho bisogno di gestire gli spazi nei nomi dei file.Così mi sono rivolto a trovare:

find -L /sys/class/scsi_host -nowarn -maxdepth 2 -type f -name 'lpfc_log_verbose' -exec echo 0x0 > {} \; 2>/dev/null

Ma questo sembra non funzionare.

find -L /sys/class/scsi_host -maxdepth 2 -type f -name 'lpfc_log_verbose' -exec cat {} \; 2>/dev/null

va bene ma mostra che la mia modifica non è riuscita.Quindi possiamo usare il reindirizzamento in find -exec?Qual è la soluzione corretta?

È stato utile?

Soluzione

Quindi possiamo usare redirect in find -exec?

No, perché il > {} viene gestito da Bash prima di invocare find.Tecnicamente, invece di correre

find ... -exec echo 0x0 > {} ...

potresti correre

find ... -exec bash -c 'echo 0x0 > {}' ...

ma penso che sia più semplice scrivere:

for dir in /sys/class/scsi_host/host* ; do
    echo 0x0 > "$dir"/lpfc_log_verbose
done

(che - non temere - gestisce gli spazi e le nuove righe e controlla i caratteri).

Altri suggerimenti

Che ne dici di questo -

find -L /sys/class/scsi_host -nowarn -maxdepth 2 -type f -name 'lpfc_log_verbose' | 
while read -r filename; do
echo "0x0" > "$filename"
done

<$ o

while read -r filename; do
echo "0x0" > "$filename"
done < <(find -L /sys/class/scsi_host -nowarn -maxdepth 2 -type f -name 'lpfc_log_verbose')

Poiché echo è un shell built-in, non è possibile utilizzarlo direttamente con -exec.Tuttavia, puoi fare quanto segue -

find -L /sys/class/scsi_host -nowarn -maxdepth 2 -type f -name 'lpfc_log_verbose' -exec sh -c 'echo "0x0" > {}' \;

Un modo semplice per farlo è scrivere il contenuto to_be_written in un file temporaneo / fittizio e utilizzare cp per copiare il contenuto nel file di destinazione, all'interno di exec

cp funziona bene e espanderà {} all'interno di -exec mentre echo / redirect non funziona

echo 1 > /tmp/dummy
find /sys/kernel/debug/tracing -name enable -exec cp /tmp/dummy {} \;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top