Для файлов в одном каталоге (без рекурсии в подкаталоги )вам не нужно ничего, кроме простого цикла оболочки, например.
for f in./*.epub; do
ebook-convert "$f" "${f%.epub}.txt"
done
Расширение параметра оболочки ${f%.epub}
удаляет завершающий .epub
, так что вы можете добавить расширение файла .txt
.
Вот одна из возможностей bash (опробована на Ubuntu 16.04.3 LTS)
Поместите свой csv в файл с именем yourfile.csv (или измените этот код ), затем запустите это:
#!/bin/bash
DATE=$1
for i in `seq 1 30`; do
NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
while read line; do
echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
done <yourfile.csv
done
Он будет генерировать +30 дней для КАЖДОЙ строки ввода, поэтому вам нужно иметь файл только с 1 строкой. Да, и он принимает дату в качестве параметра и будет генерировать +30 дней данных, начиная с этой даты.
Обновление для медленности :Попробуйте это, может у вас это работает быстрее:
#!/bin/bash
DATE=$1
let i=0
while read line; do
let i=(i++ % 30)
NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
done <yourfile.csv
1 млн строк будет составлять 1 млн строк, а не 1 млн — 30 млн.
Чтобы просто изменить количество дней в дате на некоторое фиксированное значение, например 15, вы можете
sed 's/[0-9]*/15/' your.csv
Если вы хотите изменить его в этом файле, добавьте параметр -i
, если он поддерживается вашим sed
.
Если вы хотите автоматизировать это для всех дней в течение многих месяцев, лучше используйте другой инструмент, например python
или perl
.
Обновление:Или повеселитесь sed
:
sed -n 'p;x;s/^/0123456789_/;H;g
:a
s#\(.\)\(/.*\1\)\(.\)#\3\2\3#
s/^0_/10/;s/^1_/20/;s/^2_/30/
/^31.0[46]/s/1/2/;s#^32/0\(.\)\(.*\1\)\(.\)#01/0\3\2\3#
P;\#^01/08#!ba' sample.csv
Это умножает каждую строку на каждый день, начиная с заданного 14/03
до 01/08
. Извините, что слишком много выпил.