Unix重命名文件

时间:2017-08-15 07:15:39

标签: linux bash shell unix

我想使用脚本在UNIX上重命名文件夹中的文件 原始文件的格式为:

abc.txt.temp

我想将其重命名为:

abc.txt

许多文件都使用此格式,我想从原始文件名中删除 .temp

3 个答案:

答案 0 :(得分:2)

Ciprian给出的答案肯定是一种选择,但我觉得这是一种限制。 下面的解决方案更灵活,因为您不必实际计算任何内容,您可以从任何位置删除文本而不仅仅是结尾。

以下命令(1行)将删除所有文件中提及的.temp:

for filename in *; do mv "$filename" "${filename//.temp/}"; done

注意" *"表示当前文件夹中的所有文件。您可以使用* .temp来获得与Ciprian方法完全相同的结果。 (即,仅从以.temp结尾的文件中删除.temp)

答案 1 :(得分:1)

我不知道UNIX,但由于问题也有Linux标签,它可能只是一个UNIX / Linux混乱。

大多数GNU / Linux发行版都有rename命令。根据{{​​1}}版本,要在rename名称中将foo替换为bar,语法可能就像

一样简单
files

或遵循rename foo bar files 的正则表达式语法:

sed

在您的情况下,您希望在所有以rename 's/foo/bar/' files 结尾的文件中用空字符串.temp替换'',这取决于您的.temp版本之一这些命令应该有效:

rename

rename .temp '' *.temp

答案 2 :(得分:-1)

创建以下脚本,其名称为' 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上测试