Linux:复制多个文件并删除其扩展名

3

我有一个包含 *.cpp 类型文件的目录。因此,我想通过使用 "复制" 操作将目录中的每个文件复制并粘贴到同一目录中。

 cp -a *.cpp 

有没有一种方法可以在粘贴时选择删除 .cpp 后缀呢?这种可能吗?

虽然有很多关于mvcp的选项,但我不知道直接解决你问题的方法。考虑编写一个简单的脚本(bash、python或其他语言),用于复制和重命名每个文件。此外,我相信有许多可用的工具可以帮助管理文件。也许它们能为你提供一个解决方案。 - lupz
3个回答

5

这里是一个简单的bash脚本。该脚本假定文件名只包含一个“.”字符,并基于此进行拆分。

#!/bin/sh

for f in *.cpp; do

#This line splits the file name on the delimiter "."
baseName=`echo $f | cut -d "." -f 1`
newExtension=".new"

cp $f $baseName$newExtension

done

我能把“.new”改成“”吗? - CodeIt
是的,你可以将newExtension更改为任何你喜欢的东西。 - thebiggestlebowski
那么如何在命令行中运行这个脚本并将filename.cpp复制为只有文件名的filename呢?我不知道如何使用这个脚本。 - CodeIt
这是一篇关于如何运行bash脚本的好教程。在从教程中获取了一个简单的脚本后,只需将上面的文本放入脚本中即可。http://linuxcommand.org/wss0010.php - thebiggestlebowski
@user143903 如何在命令行中运行cp文件并将其保存为新扩展名。例如:cp *.cpp *(我想要基于您的bash脚本的此命令)。 - CodeIt
1
  1. 在文本编辑器中创建一个名为“rename_extension.sh”的文件。
  2. 将上面的答案中的文本复制到此文件中并保存。
  3. 打开一个 shell 并 cd 到该目录。
  4. 运行命令“chmod 755 rename_extension.sh”。
  5. 输入“./rename_extension.sh”以执行脚本。
- thebiggestlebowski

5
您可以通过bash参数扩展来实现这一点,正如在bash手册中所提到的: ${parameter%%word} 删除匹配的后缀模式。单词被扩展生成一个模式,就像路径名扩展一样。如果该模式匹配参数的扩展值的尾部,则扩展结果是参数的扩展值,最短匹配模式(“%”情况)或最长匹配模式(“%%”情况)被删除。
请注意保留HTML标记。
for i in *.cpp
do
     cp -a $i ${i%%.cpp}
done

1

可以使用rename命令,可选使用-f参数来强制覆盖已存在的文件。

rename -f 's/\.ext$//' *.ext

要预览操作,但不更改文件,请使用-n开关(无操作)。

这不是复制而是移动 :-(


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