![将文件替换为与文件名中第一个标记匹配的其他文件夹中的其他文件](https://linux22.com/image/1297664/%E5%B0%86%E6%96%87%E4%BB%B6%E6%9B%BF%E6%8D%A2%E4%B8%BA%E4%B8%8E%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%A0%87%E8%AE%B0%E5%8C%B9%E9%85%8D%E7%9A%84%E5%85%B6%E4%BB%96%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E5%85%B6%E4%BB%96%E6%96%87%E4%BB%B6.png)
假设我有两个文件夹:
ls /A/
01 - IncorrectName.flac
02 - otherincorrect.flac
ls /B/
01 - CorectName.flac
02 - Othercorrect.flac
我如何将文件从目录 A 移动到 B,但使用目录 B 中的文件名?
我可以用自动执行此操作吗$ mv /A/01 - IncorrectName.flac /B/01 - CorrectName.flac
?
所有文件名的前 5 个字符始终为“NN - ”
答案1
我不确定我明白你想要什么,但在 bash 中这可能是这样的:
#! /bin/bash
for file in "$1"/[0-9][0-9]*.flac ; do
newname="$2"${file#"$1"}
newname=${newname:0:5+${#2}}
mv "$file" "$newname"*
done
更新: 应该与命令行参数一起使用。诀窍是字符串的长度不再是常数,因此${#2}
。