我已经下载了一些epub文件,我需要再次将它们转换为epub,以便我的电子书阅读器可以阅读它们。
我可以使用R轻松地批量转换,如下所示:
setwd('~/Downloads/pubmed')
epub.files = list.files('./',full.names = TRUE,pattern = 'epub$')
for (loop in (1:length(epub.files))) {
command = paste('ebook-convert ',
epub.files[loop],
gsub('\\.epub','.mod.epub',epub.files[loop]))
system(command)
}
但我不知道如何使用linux bash,我不知道:i)如何在for循环中分配变量,以及ii)如何使用正则表达式替换bash中的字符串。
有人可以帮忙吗?感谢。
答案 0 :(得分:2)
您还可以使用bash's parameter substitution:
for i in *.epub; do
ebook-convert ${i} ${i/%.epub/.mod.epub}
done
答案 1 :(得分:0)
您可以使用find
和sed
:
cd ~/Downloads/pubmed
for f in $(find . -regex .*epub\$); do
ebook-convert $f $(echo $f | sed 's/\.epub/.mod.epub/')
done
答案 2 :(得分:0)
不确定电子书转换是什么,但如果您尝试重命名文件,请尝试以下操作。将其粘贴到扩展名为.sh的文件中(表示shell脚本),并确保它是可执行文件(chmod + x your-file.sh)。
#!/bin/bash
FILES=~/Downloads/pubmed/*.epub
for f in $FILES
do
# $f stores the current file name, =~ is the regex operator
# only rename non-modified epub files
if [[ ! "$f" =~ \.mod\.epub$ ]]
then
echo "Processing $f file..."
# take action on each file
mv $f "${f%.*}".mod.epub
fi
done
您需要bash版本3或更高版本才能获得正则表达式支持。这也可以用正则表达式实现。
答案 3 :(得分:0)
您可以将GNU parallel与find结合使用:
find ~/Downloads/pubmed -name '*.epub' | parallel --gnu ebook-convert {} {.}.mod.epub
它应该在大多数发行版上都可用,如果处理大量文件,它可能比普通循环具有速度优势。虽然速度不是原始问题的一部分......