我在名为lista.txt的文件中有如下列表:
mickey
donald
daffy
bugs
我有一个包含许多文件的文件夹:filename1,filename2,... filenameN。
我想迭代这些文件来实现:
filename1 => mickey
filename2 => donald ...
您能为我提供此任务的示例代码吗?
答案 0 :(得分:6)
为你做你的工作不是我的风格。我宁愿你发布你已经尝试过的东西,所以我可以帮你调试它,但是这个问题很简单,不管怎样我都会咬人。
x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done
答案 1 :(得分:4)
使用bash数组:
files=( * )
i=0
while read -r new_name; do
mv "${files[$i]}" "$new_name"
(( i++ ))
done < lista.txt
答案 2 :(得分:3)
let "count=1"
for newname in $(cat lista.txt); do
mv "filename$count" "$newname"
let "count++"
done
答案 3 :(得分:1)
我使用双重定向和新的文件描述符来按照给定的“filelist.txt”重命名目录的所有flac文件:
while read -u 9 filename ; do
read -u 8 newname
echo mv "$filename" "$newname"
done 9<<<"$(ls -1 *flac)" 8< filelist.txt
目录中的每个.flac文件名都通过文件描述符9传递给变量“filename”,而在同一次迭代中,filelist.txt的每一行都通过文件描述符8传递给变量“newname”。
是的,可以避免使用其中一个新的文件描述符,只使用默认的标准输入(删除“-u 9”和“9”),但我习惯不使用stdin;这样你就可以在循环中包含一个read语句来进行交互或控制,并且它不会被重定向的数据填充。
回声用于“仅测试”,应在批准操作后删除。
答案 4 :(得分:0)
您可以在启用javascript插件的情况下使用小型Linux应用程序名称krename。它是一个具有强大功能的免费工具。
转到“插件”标签,然后将您的javascript函数添加到“函数定义”部分,如下所示:
var files = [
"Mickey",
"Donald",
"Duffy"
];
function rename(){
// krename_index is one of many special variables which can be added via ui
return files[krename_index];
}
这是一个简单的脚本,可以完成工作,但是它可以随您的需求而复杂。
转到文件名选项卡,然后在模板输入中调用函数,如下所示:
[js; rename()]
您可以在上面的代码前面加上$
,以保留原始文件名并将其添加到文件中。您可以使用“功能”按钮进行进一步的实验。