我想使用脚本在UNIX上重命名文件夹中的文件 原始文件的格式为:
abc.txt.temp
我想将其重命名为:
abc.txt
许多文件都使用此格式,我想从原始文件名中删除 .temp 。
答案 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上测试