、...Titlepage
という名前のファイルが多く、そのファイルがあるというディレクトリがあるとします。 2つのファイル名を変更するbash機能があります。 (たとえば、このコマンドはファイル名を.に変更し、そのファイルに対して同じことを行います。)titlepage_1.pdf
titlepage_2.pdf
titlepage_n.pdf
tex
$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
これによりファイルのインデックスが作成されます。尾から始まり、挿入ポイント(2番目のパラメータpush
)まで、各ファイルに1を追加して各インデックスを増やします。次に、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
明確にするために、2つのタイトルページファイルの間にnew.pdfを挿入し、新しいファイル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ファイルをリンクする方法に関する有用な情報があるかもしれません。