删除 space 并使用 makefile 通过循环替换文件名中的非 ASCII 字符

Delete space and replace non-ASCII characters in filenames via a loop with a makefile

在一个充满图像文件的文件夹中,我想删除文件名中的所有空格。此外,我希望将非 ASCII 字符替换为破折号 -。 这需要通过 makefile 来完成。

注意:文件 suffix/extension 之前的最后一个点必须保留。

示例:

"Fig. 3_16mm_300dpi_1to1_obv.tif" --> "Fig-3-16mm-300dpi-1to1-obv.tif"

到目前为止我的方法

IMGPATH  = "workfiles/inserts/figures"

cleanfigures:
    cd $(IMGPATH) && \
        for f in *; \
        do \
        mv -v "$$f" "$${f//[^a-zA-Z0-9](?=.*?\.)/-}" ; \
        done

正则表达式命令 ([^a-zA-Z0-9](?=.*?\.)) 在我用 https://regex101.com/ 测试时没有问题,但它不会相应地与 makefile 一起工作,因为没有任何内容被重命名或替换。

您说过要将所有非 ASCII 字符更改为 -。但是,根据您的尝试,您似乎只想将那些不是数字或 "plain" 字母的字符转换为 - (简单地说,我的意思是不带重音符号,不带花哨,...)。

cleanfigures:
    for f in *; \
    do \
    ext="$${f##*.}" ; \
    base="$${f%.*}" ; \
    newbase="$${base//[^a-zA-Z0-9 ]/-}" ; \
    echo "$$f" "$${newbase// /}.$$ext" ; \
    done