11

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

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

从:

file.txt.123456

至:

file.txt

这在单个命令中可行吗?

4

4 回答 4

11

您可以使用删除固定数量的字符

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.

于 2013-10-23T02:05:03.240 回答
7

你在使用 bash 吗?

file="file.txt.123456"
mv $file ${file::(-7)}
于 2013-10-23T00:50:26.003 回答
3

这类似于亚当的,但没有 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"`
于 2013-10-23T02:41:41.153 回答
0

根据单个命令的含义,至少您可以使用一些管道来执行此操作:

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

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

于 2013-10-23T00:09:34.437 回答