【问题标题】:Linux : Copy Multiple files and remove it's extensionLinux:复制多个文件并删除它的扩展名
【发布时间】:2015-01-30 15:10:52
【问题描述】:

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

 cp -a *.cpp 

可以选择在粘贴时删除 .cpp。可以吗?

【问题讨论】:

  • 虽然mvcp 有很多选择,但我不知道有适合您情况的直接解决方案。考虑编写一个简单的脚本(bash、python 等)来复制和重命名每个文件。此外,我确信有许多工具可以帮助进行文件管理。也许他们为您提供了解决方案。

标签: linux file ubuntu copy copy-paste


【解决方案1】:

这是一个简单的 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”改成“”吗?
  • 是的,您可以将 newExtension 更改为您喜欢的任何内容。
  • 那么如何从命令行运行这个脚本和 cp filename.cpp 到文件名。我不知道如何使用这个脚本。
  • 这是一个关于如何运行 bash 脚本的好教程。从教程中获得一个简单的脚本后,只需在上面的脚本中输入文本即可。 linuxcommand.org/wss0010.php
  • 1.在文本编辑器中,创建一个名为“rename_extension.sh”的文件。 2. 将上述答案中的文本复制到此文件中并保存。 3. 打开 shell 并 cd 到目录。 4. 运行命令“chmod 755 rename_extension.sh” 5. 输入“./rename_extension.sh”执行脚本。
【解决方案2】:

您可以通过 bash 参数扩展来做到这一点,如 bash 手册中所述:

${参数%%word} 删除匹配的后缀模式。这个词被扩展为产生 一个模式,就像在路径名扩展中一样。如果模式匹配 参数扩展值的尾随部分,然后 扩展的结果是参数的扩展值 最短的匹配模式(“%”)或最长的匹配模式 匹配模式(“%%”的情况)已删除。
...

for i in *.cpp
do
     cp -a $i ${i%%.cpp}
done

【讨论】:

    【解决方案3】:

    可以使用 rename,可选地使用 -f 来强制重写现有文件。

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 2017-03-06
      • 2015-01-25
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多