您好,我有一堆文件夹,其中有多个图像(jpg
和png
)位于同一目录级别(./ParentDirectory/contents/1680x1050.png
例如),在不同的子目录上称为相同的(1680x1050.jpg
或),1680x1050.png
我想知道是否可以使用命令find
将此文件复制到不同的目录(例如./Something/
)保留名称,但将父名称添加到文件名中,因此最后它们为 ./Something/ParenDirectory_1680x1050.jpg
和ParenDirectory_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 脚本。png
jpg
{}
$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
。