首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用img2pdf递归地将所有JPG转换为每个文件夹中的一个PDF?

如何使用img2pdf递归地将所有JPG转换为每个文件夹中的一个PDF?
EN

Ask Ubuntu用户
提问于 2021-08-31 08:18:33
回答 1查看 498关注 0票数 2

我有三个层次的文件夹,如main,sub-1和sub-2。我的主文件夹有很多子-1文件夹和子-1有很多的子-2文件夹与JPG图像在里面。

我使用以下命令将JPG文件从子-2复制到其父子-1文件夹中。

代码语言:javascript
复制
find . -type f -name "*.jpg" -exec sh -c 'for p; do
  cp "$p" "${p%/*/*}"
done' _ {} +

现在我必须从我的主文件夹中将所有jpgs转换成每个子-1文件夹中的一个pdf文件,因此将有我的所有复制的jpgs,以及在sub-1中转换的pdf (pdf名称应该是文件夹名称ex: sub-1)。转换完成后,我必须删除复制的jpgs仅在子-1文件夹(而不是原始的jpgs),因此将有许多子-2文件夹与一个pdf文件。

我使用img2pdf库来隐藏我的图像。我尝试了下面这个命令,它没有做任何工作,我找不到任何解决方案。现在我该怎么做呢?

代码语言:javascript
复制
find . -name '*.jpg' -type f -exec bash -c 'img2pdf *.jpg -o "${PWD##*/}".pdf' {} + \
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2021-08-31 11:32:30

我在我的Photos目录树中做了一些测试,下面有两个some脚本的系统为我工作。

first**:**

代码语言:javascript
复制
#!/bin/bash

find * -type d -exec second {} \;
echo ""

second**:**

代码语言:javascript
复制
#!/bin/bash

num=$(ls "$1"/*.jpg 2> /dev/null | wc -l)
if [ $num -ne 0 ]
then
 echo -n "."
 img2pdf -o "$1/${1//\//-}_${num}_pictures".pdf "$1"/*.jpg
fi

Edit两次:备用脚本 second生成一个pdf文件,名称中没有多少图片和“图片”:

代码语言:javascript
复制
#!/bin/bash

num=$(ls "$1"/*.jpg 2> /dev/null | wc -l)
if [ $num -ne 0 ]
then
 echo -n "."
 img2pdf -o "$1/${1##*/}".pdf "$1"/*.jpg
fi
  • 将代码区域复制并粘贴到文本编辑器中,并创建文件firstsecond
  • 使它们可执行chmod +x第一秒
  • 将它们移动到路径中的目录。如果这仅供您个人使用,请将它们移动到~/bin中。否则,如果其他用户也应该使用这些should脚本,请将它们移动到/usr/local/bin mkdir ~/bin第一个第二个~/bin中,您可能需要重新启动以使~/bin进入您的路径。

现在你已经准备好使用它们了。将目录更改为顶部或目录树,其中有图片并运行first

示例(但您有本地名称,而不是像英语那样的图片),

代码语言:javascript
复制
cd ~/Pictures
first

它将在每个子目录的终端窗口中写入一个点,在该子目录中它至少会找到一张图片并创建一个pdf文件。

您可以使用以下命令找到pdf文件

代码语言:javascript
复制
find -name "*.pdf"

Major编辑

经过与原始海报的讨论,我想我理解了要处理的目录树的结构。较低级别文件的副本位于带有人名的子目录中。这些子目录中的文件将合并成pdf-文件。

示例:

代码语言:javascript
复制
$ tree -U
.
├── adam
│   ├── mkusb-minp-2-crop.jpg
│   ├── us_keyboard_for_sudo_password.jpg
│   ├── nautilus-connect-to-server-2.jpg
│   ├── pict1
│   │   ├── mkusb-minp-2-crop.jpg
│   │   └── nautilus-connect-to-server-2.jpg
│   ├── pict2
│   │   └── us_keyboard_for_sudo_password.jpg
│   └── adam.pdf
└── betty
    ├── nautilus-connect-to-server-1.jpg
    ├── mkusb-minp-3-cropx.jpg
    ├── pict1
    │   ├── nautilus-connect-to-server-1.jpg
    │   └── calamares-mount-failed.jpg
    ├── pict2
    │   └── mkusb-minp-3-cropx.jpg
    ├── calamares-mount-failed.jpg
    └── betty.pdf

6 directories, 14 files

如果使用cd将工作目录更改为这些名称目录所在的位置,则可以使用以下修改的first外壳脚本。

代码语言:javascript
复制
#!/bin/bash

find -mindepth 1 -maxdepth 1 -type d -exec second {} \;
echo ""

它将只在名称目录中运行second外壳脚本,而不是查找目录树较低级别中的内容。

下面显示的是find如何只查找名称目录

代码语言:javascript
复制
$ find -mindepth 1 -maxdepth 1
./adam
./betty
票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1361080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档