Я пытаюсь сбросить груз SQLite таблиц в формате .csv из CMD строки с помощью xargs, т.е.перенаправлять вывод команды запуска под xargs отдельно каждый файл
find . -name "*.db" -print0 \
| xargs -0 -I {} sqlite3 -header -csv {} "select * from pulse_data;" > {}.csv
По какой-то причине его написания {}.csv
, а не каждый .db
файл в свою очередь.
Есть ли проблема с использованием нотации {}
более одного раза?
Если я запускаю его без редиректа это, кажется, работает, как ожидалось, то есть
find . -name "*.db" -print0 \
| xargs -0 -I {} sqlite3 -header -csv {} "select * from pulse_data;"
просто печатает все .db
таблицы на стандартный вывод, как ожидается, в формате .csv
Как я могу получить его перенаправить на файл с соответствующим именем, то есть <file-name>.db.csv
?
В качестве дополнения, которое может объяснить немного больше/лучше _why_ происходило первоначальное поведение, кстати - перенаправления выполняются оболочкой * до того, как запускается команда; поэтому к моменту запуска «xargs» перенаправление stdout в файл с именем '{}' уже произошло. (Я отредактировал свой ответ, чтобы сделать это явным). –