我对 shell 脚本还很陌生,所以我确信这个命令完全错误。我试图将一个文件夹中的文件重命名为 txt 文件中的名称。前提是 filenames.txt 和文件夹中的文件已经组织好,以将第一行与系统中的第一个文件匹配。我得到的结果是:
while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt
但没用。你们能帮我改正吗?
谢谢
答案1
如果你没有算法规则来重命名文件(即你实际上需要一个文件作为输入),我建议
从要重命名的文件列表中创建一个 txt 文件,例如:
查找 .-name "*.mkv" > files.txt
编辑此文件并在每行的旧名称后添加新名称,例如
./我的第一个.mkv ./我的新第一个.mkv
处理此文件:
当读取行时;执行 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
来测试这是否会执行您想要的操作。
另外,我可能会尝试用另一种方式来做这件事...我不确定您如何使用新名称生成文件,但正如另一个答案所暗示的那样,您可以循环遍历新旧名称的文件,或者只是读取名称并应用一些逻辑来创建新名称。