将文件从多个子目录复制/移动和重命名到父目录

将文件从多个子目录复制/移动和重命名到父目录

我有多个目录,每个目录都包含一个“示例”目录,该目录又包含图像。我想要做的是在每个文件的文件名末尾(但在扩展名之前)添加文本后缀,然后将目录的内容复制到其各自的父目录中。

基本上我希望 /maindir/dir1/example/、/maindir/dir2/example 等中的文件被重命名并复制/移动到它们各自的父目录,即 dir1 和 dir2。所有“示例”目录的内容都是带有 .jpg 扩展名的图像。我不知道我是否以正确的方式处理这个问题,但我设法弄清楚如何通过这样做来完成复制部分:

find /path/to/folder/ -type d -name example  -execdir bash -c 'cp  "$1"/* .' cp {}   \;

它将内容正确复制到父文件夹中,但我有点困惑如何在使用 find 时向复制的文件添加后缀。

答案1

一种方法是使用find循环for和对于每个f文件路径使用参数扩展提取扩展名 ( t=${f##*.})、基本名称 ( b=${f##*/}) 和不带扩展名的基本名称 ( ${b%.*}),以便能够创建目标名称 ( n=${b%.*}-thumb.${t}):

find /path/to/folder/ -type d -name example  -execdir sh -c 'for f in "${1}"/*;
do t=${f##*.}; b=${f##*/}; n=${b%.*}-thumb.${t}; cp -- "$f" "$n"; done' cp {} \;

您始终可以在echo前面插入一个cp来打印将要执行的内容。


另一种方式zsh

autoload zmv
zmv -n '(**/)example/(*)(.*)' '${1}${2}-thumb${3}'

-n(dry-run) 替换为-C复制文件。

相关内容