bash에서 다른 파일 사이에 새 파일 이름을 삽입하는 함수를 만드는 방법은 무엇입니까?

bash에서 다른 파일 사이에 새 파일 이름을 삽입하는 함수를 만드는 방법은 무엇입니까?

, ... Titlepage라는 이름의 많은 파일 과 해당 파일이 있는 이라는 디렉터리가 있다고 가정해 보겠습니다 . 두 개의 파일 이름을 변경하는 bash 기능이 있습니다. (예를 들어, 이 명령은 파일 이름을 . 로 바꾸고 해당 파일에 대해 동일한 작업을 수행합니다 .)titlepage_1.pdftitlepage_2.pdftitlepage_n.pdftex$alterpdf 2 3titlepage_2.pdftitlepage_3.pdftex

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 3new.pdf이제 내부에 삽입 titlepage_2.pdf하고 titlepage_3.pdf이름을 지정할 수 있는 함수(예: ) 를 원합니다 titlepage_3.pdf. 그리고 다음 파일의 수가 증가합니다. titlepage_3.pdf기다리다 . titlepage_4.pdf titlepage_4.pdftitlepage_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  

그러면 파일의 색인이 생성됩니다. 꼬리부터 시작하여 삽입 지점(두 번째 매개변수 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

따라서 명확히 하기 위해 두 개의 제목 페이지 파일 사이에 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 파일을 연결하는 방법에 대한 유용한 정보가 있을 수 있습니다.

관련 정보