通过删除最后n个字符重命名文件

时间:2013-10-23 00:01:34

标签: shell unix

我想通过删除最后N个字符来重命名文件

例如,我想通过删除最后7个字符来重命名这些文件

自:

file.txt.123456

要:

file.txt

这可以在一个命令中使用吗?

4 个答案:

答案 0 :(得分:9)

您可以使用

删除固定数量的字符
mv "$file" "${file%???????}"  # 7 question marks to match 7 characters

这适用于任何符合POSIX标准的shell。

要删除最后一个分机(可能多于或少于7个字符),请使用

mv "$file" "${file%.*}"

要在给定扩展名后修剪所有内容,您可以尝试

EXT=csv
mv "$file" "${file%.$EXT.*}".$EXT

实际上删除了.$EXT以及之后的所有内容,然后重新附加.$EXT

答案 1 :(得分:6)

你在使用bash吗?

file="file.txt.123456"
mv $file ${file::(-7)}

答案 2 :(得分:2)

这类似于Adam的,但没有bashisms(因为它被标记为shell而不是bash)。

remove_n(){
  echo ${2:0:$((${#2}-$1))}
}

remove_n 8 file.txt.1234567
#remove last 8 characters from 2nd argument
#for filenames in variables use
mv "$VAR" `remove_n 8 "$VAR"`

答案 3 :(得分:0)

根据单个命令的含义,至少可以使用一些管道来完成:

mv file.txt.123456 $(ls file.txt.123456 | rev | cut -c8- | rev)

看看你的例子,我想知道“从最后一个点到最后一个点删除字符”这样的模式是否更合适。