我想使用脚本在UNIX上重命名文件夹中的文件。
原始文件的格式为:Unix重命名文件
abc.txt.temp
,我想它重命名为:
abc.txt
许多文件中使用这种格式,我想删除.temp从原始文件名称。
我想使用脚本在UNIX上重命名文件夹中的文件。
原始文件的格式为:Unix重命名文件
abc.txt.temp
,我想它重命名为:
abc.txt
许多文件中使用这种格式,我想删除.temp从原始文件名称。
答案西普里安了测试,无疑是一个选项,但我觉得它的限制。 下面的解决方案非常灵活,因为您不必实际计算任何内容,并且可以从任何位置删除文本,而不仅仅是结尾。
下面的命令(1行)将去除.temp的任何提及中的所有文件:
for filename in *; do mv "$filename" "${filename//.temp/}"; done
注的“*”表示当前文件夹中的所有文件。您可以使用* .temp来实现与Ciprian方法完全相同的结果。 (也就是说,只从以.temp结尾的文件中删除.temp)
与像 'rename.sh' 的名称创建以下脚本:
#!/bin/bash
TARGET_DIR=$1
TARGET_FILES="$TARGET_DIR/*.temp"
for fileName in $TARGET_FILES
do
newFileName=${fileName::-5}
mv -v "${fileName}" "${newFileName}"
done
注的${var:offset:length}
扩张需要的bash版本4或更高。
给它执行权限:
chmod a+x rename.sh
你需要调用它并传递.temp文件作为参数的目录名。这样称呼它:
./rename.sh /path/to/the/temp-files
脚本遍历目标文件夹中所有* .temp文件,从文件路径中提取的最后5个字符(“.temp”是5个字符)和移动原始文件到不包含.temp作为扩展名的新文件。
编辑:上一个CentOS 7
子串表达式<0错误 – Ritesh
@Ritesh,我向mv命令添加了详细模式。请修改脚本并重新运行。注意mv命令的-v选项。之后,请显示输出。我怀疑文件名的问题,但我们需要确切地看到这是什么。 –
可能需要处理:: - :) –
我不了解UNIX,但是因为问题也有Linux标记,它可能只是UNIX/Linux的混淆。
大多数GNU/Linux发行版都有rename
命令。根据rename
版本,与bar
在files
名称替换foo
语法可以是简单的
rename foo bar files
或者按照sed
的正则表达式语法:
rename 's/foo/bar/' files
在你的情况,你想在所有以.temp
结尾的文件中用空字符串(''
)替换.temp
,因此根据您的rename
版本,这些命令中的一个应该可以工作:
rename .temp '' *.temp
或
rename 's/\.temp$//' *.temp
显示'这prename'输出 – RomanPerekhrest
您可能需要使用'mmv'工具:'MMV “* .txt.temp” “#的1.txt”' –
可能的复制[Shell/Bash快捷方式批量重命名文件夹中的文件](https://stackoverflow.com/questions/8416990/shell-bash-shortcut-for-bulk-renaming-of-files-in-a-folder) – Fabien