脚本很新...
可以说,我有多个文件,在当前目录中具有多个前缀。我需要根据用户输入重命名它们。假设我有aaa_file.dat和bbb_file.dat aaa_log.dat ccc.txt等。
脚本将要求输入"旧前缀",然后输入"新前缀",然后搜索具有"旧"前缀的文件,然后以" new"前缀为名。
。print "enter old prefix" ;
read old ;
print "enter new prefix" ;
read new ;
查找并重命名的部分是我卡住的地方。
for $old in * ;
do mv $old_* $new_* ;
done
如果我以用户AAA和zzz我的文件输入,我的结果应该是:aaa_file.dat和aaa_log.dat现在被命名为zzz_file.dat zzz_log.dat
您在
中有一些错误for $old in * ;
do
mv $old_* $new_* ;
done
使用循环时,将分配一个值为循环变量。因此,将$
放在for $old in *
中。
您已经为变量old
分配了一个值,您不想用新值覆盖它。使用诸如for file in *
(或for file in ${old}*
)之类的新变量。变量可以以其名称下意。$old_*
与${old}_*
不同。在所有情况下都习惯于使用这些牙套,除了一个字符变量后有空间或引用。
当您编写${new}_*
时,您希望有一些魔术。该变量将扩展到其值(例如zzz),外壳以zzz_
(未找到)开头的文件搜索,并将尝试(当您编写的mv ${old}_* ${new}_*
)将其名称以AAA_开头的所有文件移动到名为 zzz_*
的目录,以移动所有文件。。
因此,从旧文件名中构建一个新文件名,其中诸如sed
:
必须从旧文件名构建新文件名。
for file in ${old}_*; do
newfile=$(echo "${file}"| sed "s/^${old}_/${new}_/")
# Remove the word echo when the command shows the mv commands you like
echo mv "${file}" "${newfile}"
done