Question

Je voudrais ajouter un texte simple dans certains fichiers. Plus précisément, je le fais sur Linux lpfc pilotes:

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

Mais la réflexion sur le cas commun je dois espaces de poignée dans les noms de fichiers. Ainsi, je me suis tourné pour trouver:

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

Mais cela ne semble pas fonctionner.

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

est bien, mais montre mon édition n'a pas le succès. Alors, peut-on utiliser Rediriger à trouver exec? Quel est le travail autour correct?

Était-ce utile?

La solution

Alors peut-on utiliser Rediriger à trouver exec?

Non, parce que le > {} est géré par Bash avant d'appeler find. Techniquement, au lieu de courir

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

vous pouvez exécuter

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

mais je pense qu'il est plus simple d'écrire:

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

(qui - ne craignez pas - ne les espaces de poignée et sauts de ligne et les caractères de contrôle).

Autres conseils

Qu'en est-ce -

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

ou

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

Depuis echo est un shell built-in vous ne pouvez pas l'utiliser directement avec -exec. Cependant, vous pouvez effectuer les opérations suivantes -

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

An easy way to do this, is to have the to_be_written content written to a temporary/dummy file and use cp to have the content copied to the destination file, inside exec

cp works well, and will expand {} inside -exec while echo/redirect fails to work

echo 1 > /tmp/dummy
find /sys/kernel/debug/tracing -name enable -exec cp /tmp/dummy {} \;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top