如何在Linux中重命名文件而不改变扩展名,将102221.pdf重命名为102221_name.pdf

5
如何在Linux中重命名文件而不改变扩展名?
将102221.pdf重命名为102221_name.pdf。

嗨,Deepak,我想在一个通用程序中使用这个命令,其中的文件具有各种扩展名,如.pdf、.jpg、.png等。 - Pravin Hinge
3个回答

7
我想您需要的是这个:

这是您想要的内容:

for x in *; do mv "$x" "${x%.*}_name.${x##*.}"; done
  • ${x%.*}将返回不带扩展名的文件名
  • ${x##*.}将提取扩展名

1
请尽量避免仅提供代码的答案。花点时间写几句说明为什么它有效或者它是做什么的。 - afsantos
我可以使用以下命令将文件名更改并分配给用户定义的变量吗?UENTITY=${echo $x | tr '[a-z]' '[A-Z]'%.}_date '+%y%m%d''.${echo $x | tr '[a-z]' '[A-Z]'##.} - Pravin Hinge
尝试这样做,首先将其转换为大写字母 upper=echo $a | tr '[a-z]' '[A-Z]',然后 UENITITY=${upper%.}_date '+%y%m%d'.${upper##.} - Hackaholic
1
为什么不应该解析ls的输出 - 考虑使用for x in *代替? - dessert

2
ls * | sed -r 'p;s/\.pdf$/_name\.pdf/g' | xargs -n2 mv

使用ls命令列出所有文件并将输出传输到sedsed将.pdf替换为_name.pdf,并将原始文件名和新文件名输出到xargs,然后使用这两个参数调用mv
您也可以使用更简单的rename命令。
 rename 's/\.pdf$/_name\.pdf/g' ./*

正则表达式模式保持不变。

谢谢你的回答,Leon。但是我想在一个通用程序中使用它,其中文件具有各种扩展名,如.pdf、.jpg、.png等。 - Pravin Hinge

0

你使用的是哪个操作系统?有些操作系统会自带Perl编译器,如果你的操作系统有Perl,我们也可以找到另一种方法... - Deepak Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接