从文件名列表中重命名文件

从文件名列表中重命名文件

我对 shell 脚本还很陌生,所以我确信这个命令完全错误。我试图将一个文件夹中的文件重命名为 txt 文件中的名称。前提是 filenames.txt 和文件夹中的文件已经组织好,以将第一行与系统中的第一个文件匹配。我得到的结果是:

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

但没用。你们能帮我改正吗?

谢谢

答案1

如果你没有算法规则来重命名文件(即你实际上需要一个文件作为输入),我建议

  1. 从要重命名的文件列表中创建一个 txt 文件,例如:

    查找 .-name "*.mkv" > files.txt

  2. 编辑此文件并在每行的旧名称后添加新名称,例如

    ./我的第一个.mkv ./我的新第一个.mkv

  3. 处理此文件:

    当读取行时;执行 eval mv $line;完成 < files.txt

答案2

我从这里获得灵感:https://unix.stackexchange.com/a/26604

听起来您需要同时循环遍历文件和目录中的文件:

DIR=./thefiledir
while : ; do
    read -r oldfile <&3
    read -r newfile <&4
    if [ -z "$oldfile" -o -z "$newfile" ]; then
        break
    fi
    mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt

我不知道文件中是否有目录名filenames.txt,因此您可能需要echo在该行前面放置一个mv来测试这是否会执行您想要的操作。

另外,我可能会尝试用另一种方式来做这件事...我不确定您如何使用新名称生成文件,但正如另一个答案所暗示的那样,您可以循环遍历新旧名称的文件,或者只是读取名称并应用一些逻辑来创建新名称。

相关内容