Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/web-services/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在shell脚本中向文件名添加扩展名_Shell - Fatal编程技术网

如何在shell脚本中向文件名添加扩展名

如何在shell脚本中向文件名添加扩展名,shell,Shell,基本上,因为我必须对.bz2文件进行加密,所以我没有任何扩展名,但是这些文件应该是.hdf4文件 所以,我可以一个接一个地做,但是我想浏览一下我目录中的所有文件 因此,对于单个文件: mv A2003119.L3m_DAY_PAR_par_4km A2003119.L3m_DAY_PAR_par_4km.hdf4 现在尝试浏览所有文件 mv *4km *4km.hdf4 这不管用 所以我尝试了别的方法: for i in *4km; do mv $i(*4km)

基本上,因为我必须对.bz2文件进行加密,所以我没有任何扩展名,但是这些文件应该是.hdf4文件

所以,我可以一个接一个地做,但是我想浏览一下我目录中的所有文件

因此,对于单个文件:

     mv A2003119.L3m_DAY_PAR_par_4km A2003119.L3m_DAY_PAR_par_4km.hdf4
现在尝试浏览所有文件

     mv *4km *4km.hdf4
这不管用

所以我尝试了别的方法:

for i in *4km;
    do mv $i(*4km) $i(*4km.hdf4)
done 
我不知道如何正确地写。。。。欢迎任何帮助!
提前多谢

一旦文件名在
$i
中,它就完整地存在了——您不需要做任何其他引用循环中
4km
部分的事情

for i in *4km; do
    mv -- "$i" "$i.hdf4"
done

有关执行重命名(递归操作、剥离旧扩展等)的更全面的文档,请参阅。

大多数发行版都会附带
rename
命令(有时
prename
),该命令将为您完成繁重的工作:

rename -n -v 's/$/\.hdf4/' *4km
这个命令实际上不会做任何事情,它只会告诉你将要做什么

一旦您满意了,您可以再次运行它,但不需要使用
-n
,这将实际重命名它们


rename
命令使用Perl命令将源文件名转换为目标文件名。在本例中,它是一个替代命令
s
,它将“实体结束”标记
$
替换为文本
.hdf4
,有效地将扩展名附加到每个文件名。

是!这就是我要找的!我必须说我是Bash和shell脚本的新手。非常感谢!好的-我现在知道了,$I,但是为什么加上“--”??@sophie“--”通常意味着选项的结束-之后的任何内容都不应被视为选项。因此,这将防止mv将名为'-filename'的内容解释为选项,而不是参数/\