如何删除某个目录中的最后n个文件名字符(在Mac终端中) - unix?

时间:2018-05-26 23:45:59

标签: macos unix rename

我正在尝试使用“mv”重命名,因为“重命名”命令在我的Mac终端中不起作用。

我有一堆名为

的文件
DTM001_ACGGT-TTAGGC.fq
DTM156_GGTTG-ACAGTG.fq

...等

我希望将它们重命名为

DTM001.fq
DTM156.fq

我想更简单的方法是在文件扩展名之前删除最后13个字符?

我试过这些链接:

但是没有一个对我有用,也许是因为我不完全理解如何操纵我的具体案例的答案或某些答案使用“重命名”命令,我无法访问。

2 个答案:

答案 0 :(得分:2)

macOS终端只是一个名为shell的交互式程序的接口。默认shell的名称为bash

您要查找的内容称为shell脚本或bash脚本,用于重命名文件。

您引用的问题有答案。重申:

cd directory_with_the_files
for file in *.fq; do
    mv -vn "${file}" "${file%_*}.fq"
done

您可以在命令行中输入所有内容,或将其放入文件中并使用以下命令执行:

bash file_containing_the_commands

这将遍历当前目录中的所有.fq个文件,并将它们重命名为您想要的文件。 -v的{​​{1}}选项只是意味着在重命名时打印重命名(知道它正在做某事有用),mv标志表示不要意外覆盖任何文件(如果您输入错误的内容或遇到重复的数字)。

所有的魔力发生在-n,其中说 "删除第一个${file%_*}.fq后的所有内容,然后添加_"。这被称为" shell参数扩展,"您可以在Bash Reference Manual中了解更多信息。它的措辞有点过于冗长,但这是与这个特定用例相关的一点:

  

$ {参数}

     

扩展以产生一个   模式就像文件名扩展一样。如果模式匹配   参数的扩展值的尾部,然后是结果   扩展是具有最短匹配的参数的值   模式('%'案例)已删除。

答案 1 :(得分:0)

最简单的方法是使用rename - 请参阅最后的说明,以便在Mac上安装。

因此,在回答您的问题时,您可以看到如果替换(命令实际上是s “替换”)会发生什么,从第一个下划线到结束.fq的文件名:

rename --dry-run  's/_.*/.fq/'   *fq

'DTM001_ACGGT-TTAGGC.fq' would be renamed to 'DTM001.fq'
'DTM156_GGTTG-ACAGTG.fq' would be renamed to 'DTM156.fq'

如果看起来不错,请移除--dry-run并再次运行以获得真实效果。

如果您安装了Mac,则可以在Mac上使用rename。默认情况下,Apple不会发送包含macOS的包管理器。因此,许多人使用the homebrew website中的homebrew

如果您有,只需安装rename

即可
brew install rename

然后,您将拥有一个包管理器,您可以受益于各种可爱的软件,包括Apple提供的您最喜爱的工具的所有过时,古老版本的最新版本:

  • PHP
  • 的Perl
  • ImageMagick的
  • GNU sed
  • GNU awk
  • GNU find
  • GNU Parallel
  • zeromq
  • HTOP
  • socat
  • SOX
  • 的ffmpeg
  • 的YouTube-DL
  • zenity
  • redis的
  • FEH
  • mosquitto
  • doxygen的
  • pandoc等。