I'd like to add some simple text into some files. Specifically, I do this on Linux lpfc drivers:
ls -1 /sys/class/scsi_host/host* | awk -F '@' '{system("echo 0x0 > "$1"/lpfc_log_verbose")}'
But thinking about common case I need to handle spaces in file names. Thus I turned to find:
find -L /sys/class/scsi_host -nowarn -maxdepth 2 -type f -name 'lpfc_log_verbose' -exec echo 0x0 > {} \; 2>/dev/null
But this seems not working.
find -L /sys/class/scsi_host -maxdepth 2 -type f -name 'lpfc_log_verbose' -exec cat {} \; 2>/dev/null
is fine but shows my edit didn't success. So can we use redirect in find -exec? What is the correct work-around?
So can we use redirect in find -exec?
No, because the > {}
is handled by Bash before invoking find
. Technically, instead of running
find ... -exec echo 0x0 > {} ...
you could run
find ... -exec bash -c 'echo 0x0 > {}' ...
but I think it's simpler to write:
for dir in /sys/class/scsi_host/host* ; do
echo 0x0 > "$dir"/lpfc_log_verbose
done
(which — fear not — does handle spaces and newlines and control characters).