假设,我有一个名为 的目录Titlepage
,其中有许多名为titlepage_1.pdf
, titlepage_2.pdf
...的文件titlepage_n.pdf
以及它们的tex
文件。我有一个 bash 函数可以更改两个文件名。(例如,$alterpdf 2 3
此命令将文件名交换titlepage_2.pdf
为titlepage_3.pdf
. 并且对相应的文件也执行相同的操作tex
。)
function swap(){ mv $1 $1._tmp && mv $2 $1 && mv $1._tmp $2; }
function alterpdf(){ swap titlepage_$1.pdf titlepage_$2.pdf; swap titlepage_$1.tex titlepage_$2.tex; }
filepush new.pdf 2 3
现在,我想要一个可以插入new.pdf
内部titlepage_2.pdf
且titlepage_3.pdf
名称为 的函数(例如, ) titlepage_3.pdf
。并且下一个文件的数量会增加。titlepage_3.pdf
至titlepage_4.pdf
titlepage_4.pdf
至titlepage_5.pdf
等等。
.tex
该目录中 还有一个包含所有 pdf 的文件。
编辑
我想实施以下-
Titlepage$ ls
titlepage_1.tex titlepage_1.pdf titlepage_2.tex titlepage_2.pdf titlepage_3.tex titlepage_3.pdf
Titlepage$ vim new.tex
Titlepage$ pdflatex new.tex
Titlepage$ ls
new.pdf new.tex titlepage_1.tex titlepage_1.pdf titlepage_2.tex titlepage_2.pdf titlepage_3.tex
titlepage_3.pdf
Titlepage$ push new.pdf 2 3
Titlepage$ ls
titlepage_1.tex titlepage_1.pdf titlepage_2.tex titlepage_2.pdf titlepage_3.tex titlepage_3.pdf titlepage_4.tex titlepage_4.pdf
编辑
提议的解决方案
$ls *.pdf|grep -Eo [0-9]+|sort -n
这将产生文件的索引。从尾部开始递增每个索引,为每个文件添加 1,直到插入点(第二个参数push
)。然后将目标文件( new.pdf
)重命名为titlepage_3rd_argement_of_push.pdf
答案1
好的,这是一个可以完成您想要的操作的脚本。
#!/bin/bash
NEWFILES=${1}
INSERT_IDX=${2}
PREFIX="titlepage_"
# just in case
prefixnum=${filebase//[^0-9]/}
case $prefixnum in
(*[![:blank:]]*) echo "invalid prefix, contains numbers"; exit 1;;
esac
# check input arguments
if [ ! $# -eq 2 ];
then
echo "USAGE: insert.sh <newfiles> <insertion_index>"
echo 'example: insert.sh "new.pdf new.tex" 2'
exit 1
fi
## process infiles
for infile in ${NEWFILES}
do
ext=${infile##*.}
for file in $(ls -1 ${PREFIX}[0-9]*.${ext} | sort -rV)
do
filebase=${file%.*}
number=${filebase//[^0-9]/}
numberless=${filebase//[0-9]/}
if [ "${numberless}${number}.${ext}" != "${file}" ];
then
echo "invalid file ${file}"
echo "${numberless}${number}.${ext}" "${file}"
exit 1
fi
if [ ${number} -ge ${INSERT_IDX} ]
then
echo "$file" "${numberless}$((${number} + 1))".$ext
mv "$file" "${numberless}$((${number} + 1))".$ext
else
echo ${file}
fi
done
echo "${infile}" "${PREFIX}${INSERT_IDX}.${ext}"
mv "${infile}" "${PREFIX}${INSERT_IDX}.${ext}"
done
答案2
可以插入
new.pdf
内部titlepage_2.pdf
和titlepage_3.pdf
因此,为了澄清,您希望能够将 new.pdf 夹在两个 titlepage 文件之间,并生成一个新文件 titlepage_3.pdf,并将原始 titlepage_3.pdf 移动到 titlepage_4.pdf,并增加剩余的 pdf 文件具有相似的名称吗?
换句话说,我们希望留下一个新列表,其中新的 titlepage_3.pdf 现在包含 titlepage_2.pdf 中的页面,然后是 new.pdf 中的页面,然后是 titlepage_3.pdf 中的页面?有几种方法可以连接 pdf你可以用这个。为了增加数字,我建议在串联步骤之前使用 perl 样式的正则表达式和命令执行此操作rename
。
对于 .tex 文件,我不确定您到底想要完成什么,但是这个链接可能有关于如何连接 tex 文件的有用信息。