我想通过删除最后N个字符来重命名文件例如,我想通过删除最后7个字符来重命名这些文件发件人:
file.txt.123456
收件人:
file.txt
这在一个命令中是否可行?
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。
.$EXT
k4emjkb12#
你在用bash吗?
file="file.txt.123456" mv $file ${file::(-7)}
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"`
ztmd8pv54#
要对目录中的每个文件执行此操作,您可以使用此命令。如第一个问题,7个问号对应7个字符
for file in *; do mv "$file" "${file%???????}"; done
huwehgph5#
根据您对单个命令的理解,至少您可以使用一些管道来完成此操作:
mv file.txt.123456 $(ls file.txt.123456 | rev | cut -c8- | rev)
看看你的例子,我想知道像“从最后一个点到结尾删除字符”这样的模式是否更适合。
5条答案
按热度按时间voase2hg1#
您可以使用以下命令删除固定数量的字符
这将在任何POSIX兼容shell中工作。
要删除最后一个扩展名(可能多于或少于7个字符),请使用
要修剪给定扩展名后的所有内容,可以尝试
它实际上删除了
.$EXT
和后面的所有内容,但随后重新附加了.$EXT
。k4emjkb12#
你在用bash吗?
rqcrx0a63#
这与亚当的类似,但没有害羞(因为它被标记为shell而不是bash)。
ztmd8pv54#
要对目录中的每个文件执行此操作,您可以使用此命令。
如第一个问题,7个问号对应7个字符
huwehgph5#
根据您对单个命令的理解,至少您可以使用一些管道来完成此操作:
看看你的例子,我想知道像“从最后一个点到结尾删除字符”这样的模式是否更适合。