Я хотел бы применить команды к файлам в каталоге target_dir с помощью следующего кода.
for t_file in $(find 'target_dir' -maxdepth 1 -type f);
do
exec {fd}<'command_list.txt'
while read -u "${fd}" eval_command
do
eval "${eval_command}"
done
exec {fd}>&-
done
Пример command_list.txt:
# command_list.txt
cat "${t_file}"
Программа загружает файл command_file.txt для каждого файла, но я ожидаю, что будет более эффективно, если я смогу переместить указатель файла обратно в первую строку файла без необходимости закрывать и открывать его между итерациями.
exec {fd}<'command_list.txt'
for t_file in $(find 'target_dir' -maxdepth 1 -type f);
do
(move cursor of read to the first line of 'command_list.txt')
while read -u "${fd}" eval_command
do
eval "${eval_command}"
done
done
exec {fd}>&-
Возможен ли поиск указателя файла обратно в начало файла без его повторного открытия в bash?
for file in $(...)
сам по себе содержит ошибки — см. DontReadLinesWithFor. См. UsingFind, чтобы узнать о многочисленных правильных альтернативных подходах к выполнению кода для каждогоfind
результата. - person Charles Duffy   schedule 05.10.2016