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

pgccezyw  于 2022-11-04  发布在  Unix
关注(0)|答案(5)|浏览(168)

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

file.txt.123456

收件人:

file.txt

这在一个命令中是否可行?

voase2hg

voase2hg1#

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

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

k4emjkb1

k4emjkb12#

你在用bash吗?

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

rqcrx0a63#

这与亚当的类似,但没有害羞(因为它被标记为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"`
ztmd8pv5

ztmd8pv54#

要对目录中的每个文件执行此操作,您可以使用此命令。
如第一个问题,7个问号对应7个字符

for file in *; do mv "$file" "${file%???????}"; done
huwehgph

huwehgph5#

根据您对单个命令的理解,至少您可以使用一些管道来完成此操作:

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

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

相关问题