次のファイルディレクトリがあります。
file.1111111_1.pdf
file.1111111_2.pdf
file.2222222_1.pdf
file.2222222_2.pdf
…
file.1234567_1.pdf
file.1234567_2.pdf
…
file.aaaaaaa_1.pdf
file.aaaaaaa_2.pdf
…
file.abcdefg_1.pdf
file.abcdefg_2.pdf
同じファイル名の最初の7桁を同じディレクトリまたはサブディレクトリの新しいファイルにマージするにはどうすればよいですか?次のようにしてください。
file.1111111.pdf
file.2222222.pdf
…
file.1234567.pdf
…
file.aaaaaaa.pdf
…
file.abcdefg.pdf
答え1
PDFファイルをマージするにはいくつかのツールがあり、そのうちの1つはですpdfunite
。このツールを使用して必要なタスクを実行する簡単な1行のコードは次のとおりです。
for file in file.*_*.pdf; do [[ -e ${file%_*}.pdf ]] && \
continue || pdfunite ${file%_*}_*.pdf ${file%_*}.pdf; done
私はここで使います。パラメータ拡張メカニズム ${file%_*}
一致するファイル名からサフィックスパターンを削除し、出力ファイルに_*
します。${file%_*}.pdf
答え2
以下は、「convert」コマンドを使用する簡単な例です。
$ ls
files.txt TEST.pdf
TEST.pdf
次のウェブサイトから入手したAdobe PDFです。ここ。これは、残りのファイル名を埋めるために使用する例です。
ファイル名は次のとおりです。files.txt
$ cat files.txt
file.1111111_1.pdf file.1111111_2.pdf file.2222222_1.pdf file.2222222_2.pdf file.1234567_1.pdf file.1234567_2.pdf file.aaaaaaa_1.pdf file.aaaaaaa_2.pdf file.abcdefg_1.pdf file.abcdefg_2.pdf
このファイルを使用してテストデータを生成します。
$ for i in $(<files.txt); do cp TEST.pdf $i; done
$ ls
file.1111111_1.pdf file.1234567_1.pdf file.2222222_1.pdf file.aaaaaaa_1.pdf file.abcdefg_1.pdf files.txt
file.1111111_2.pdf file.1234567_2.pdf file.2222222_2.pdf file.aaaaaaa_2.pdf file.abcdefg_2.pdf TEST.pdf
これで、名前構造に一致するすべてのファイルを繰り返すことができます。次に、適切なサブディレクトリに配置します。その後、「変換」コマンドを使用してこれらのPDFを単一のファイルにマージしました。
$ for pdf in $(ls *.*_*.pdf); do base=$(echo $pdf | cut -d_ -f1) ; \
[[ -d $base ]] || mkdir $base ; mv $pdf $base/ ; \
convert $base/*_*.pdf $base/$base.pdf ; done
$ ls
file.1111111 file.1234567 file.2222222 file.aaaaaaa file.abcdefg files.txt TEST.pdf
$ ls file.1111111/
file.1111111_1.pdf file.1111111_2.pdf file.1111111.pdf
file.11111111.pdf
サブディレクトリにはマージされたファイルがあります。