Regex 如何使用另一个具有相同uniqe前缀的文件批量重命名文件? 问题

Regex 如何使用另一个具有相同uniqe前缀的文件批量重命名文件? 问题,regex,shell,terminal,rename,batch-rename,Regex,Shell,Terminal,Rename,Batch Rename,给定大量具有专用唯一前缀的文件 我想用以相同唯一前缀开头的相关文件的文件名替换它们的每个文件名 例子 输入: 输出: 假设所有下划线以下的内容都被视为UUID,则此操作有效: #!/bin/bash for file in *.md; do echo $file; EXT="${file##*.}" FILENAME="${file%.*}" UUID="${file%_*}" if [ -f "${UUID}.txt" ]; then

给定大量具有专用唯一前缀的文件

我想用以相同唯一前缀开头的相关文件的文件名替换它们的每个文件名

例子 输入: 输出:

假设所有下划线以下的内容都被视为UUID,则此操作有效:

#!/bin/bash

for file in *.md; do
    echo $file;
    EXT="${file##*.}"
    FILENAME="${file%.*}"
    UUID="${file%_*}"
    if [ -f "${UUID}.txt" ]; then
        mv "${UUID}.txt" "${FILENAME}.txt"
        echo "renamed ${UUID}.txt to ${FILENAME}.txt"
    fi
done

这不会遍历目录,但只对当前目录有效。

您能否澄清如何定义“前缀”?-所有的字母都到了吗?我已经修改了这个问题,谢谢你指出。你写了代码吗?
- UUIDa_apple.txt
- UUIDa_apple.md

- UUIDb_orange.txt
- UUIDb_orange.md

- UUIDc_banana.txt
- UUIDc_banana.md
- UUIDa.txt
- UUIDa_apple.md

prefix -> UUIDa
add "_apple" after UUIDa -> UUIDa_apple
#!/bin/bash

for file in *.md; do
    echo $file;
    EXT="${file##*.}"
    FILENAME="${file%.*}"
    UUID="${file%_*}"
    if [ -f "${UUID}.txt" ]; then
        mv "${UUID}.txt" "${FILENAME}.txt"
        echo "renamed ${UUID}.txt to ${FILENAME}.txt"
    fi
done