gpt4 book ai didi

bash - 命令行批量重命名

转载 作者:行者123 更新时间:2023-12-04 05:22:13 26 4
gpt4 key购买 nike

我在多个子文件夹中有文件,我想将它们全部移动到一个文件夹中。
然后我喜欢重命名这些文件。

/foo/A1000-foobar1412.jpg
/foo/A1000-foobar213.jpg
/foo/A1000-foobar314.jpg
/foo1/B1001-foobar113.jpg
/foo2/C1002-foobar1123.jpg
/foo2/C1002-foobar24234.jpg

我想得到的是:
../bar/A1000-1.jpg
../bar/A1000-2.jpg
../bar/A1000-3.jpg
../bar/B1001-1.jpg
../bar/C1002-1.jpg
../bar/C1002-2.jpg

所以到目前为止我所做的是:
find . -name "*.jpg" -exec mv {} ../bar/ \;

但现在我坚持重命名文件。

最佳答案

这是一个脚本,它只采用文件的所需基本名称,并根据目标目录中已存在多少具有相同基本名称的文件附加一个增量索引:

for file in $(find . -name "*.jpg")
do
bn=$(basename $file)
target_name=$(echo $bn | cut -f 1 -d "-")
index=$(($(find ../bar -name "$target_name-*" | wc -l) + 1))
target="${target_name}-${index}.jpg"

echo "Copy $file to ../bar/$target"
# mv $file ../bar/$target
cp $file ../bar/$target
done

使用此解决方案,您不能只在 mv 前面放置一个 echo 来测试它,因为代码依赖于目标目录中的真实文件来计算索引。而是使用 cp(或 rsync),并在您对结果满意后立即手动删除源文件。

关于bash - 命令行批量重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com