使用查找命令复制和更改名称

使用查找命令复制和更改名称

您好,我有一堆文件夹,其中有多个图像(jpgpng)位于同一目录级别(./ParentDirectory/contents/1680x1050.png例如),在不同的子目录上称为相同的(1680x1050.jpg或),1680x1050.png

我想知道是否可以使用命令find将此文件复制到不同的目录(例如./Something/)保留名称,但将父名称添加到文件名中,因此最后它们为 ./Something/ParenDirectory_1680x1050.jpgParenDirectory_1680x1050.png

答案1

cd进入 的父目录后ParentDirectory,运行:

find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
  -exec sh -c 'cp "$1" "Something/${1%%/*}_${1##*/}"' sh {} \;

在为每个或找到的-exec新 shell 进程执行的部分中,图像的路径作为参数传递给 shell 脚本。pngjpg{}$1

cp命令中,目标文件名被放在一起,${1%%/*}用于获取父目录名称,删除最长的后缀模式(第一个之后的所有字符/),并${1##*/}用于获取文件名部分,删除最长的前缀模式(直到最后一个字符/)。

要对找到的所有图像仅执行一个 shell 进程以获得相同的结果,您可以使用

find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
  -exec sh -c 'for i; do cp "$i" "Something/${i%%/*}_${i##*/}"; done' sh {} +

并使用 -loop 循环遍历脚本中的所有文件名参数for

相关内容