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