【问题标题】:Batch script to remove parts of a filename within variable characters [closed]用于删除可变字符内文件名部分的批处理脚本[关闭]
【发布时间】:2017-01-31 07:54:52
【问题描述】:

请帮忙!

我有一组 60 个文件,格式如下:

  • XXXXX_L2_R1_001_XneCgnfdkjTTTnm.fastq.gz
  • XXXXX_L2_R2_001_GmnbkjZZnvhkfPn.fastq.gz

我想删除“_L2”部分和第三个下划线之后的所有其他内容,以便获得类似:

  • XXXXX_R1.fastq.gz
  • XXXXX_R2.fastq.gz

数字“XXXXX”因文件而异,每个数字总是有一个 R1 文件和一个 R2 文件。

也许重命名或 sed 命令会有所帮助。

谢谢!

【问题讨论】:

  • 请发布您到目前为止尝试过的内容以及无效的内容。听起来您希望我们为您完成工作
  • 请注意stackoverflow.com 不是免费的脚本/代码编写服务。如果您告诉我们到目前为止您已经尝试过什么(包括您已经在使用的脚本/代码)以及您遇到的问题,那么我们可以尝试帮助解决具体问题。您还应该阅读How do I ask a good question?
  • 哪个操作系统?哪个壳? batchfile 和你的问题有什么关系?
  • 如果我遇到这种情况,我深表歉意。其实我找了这个命令差不多两天了。我尝试使用我在通过 stackoverflow、stackexchange、askubuntu 和 unix foruns 搜索时发现的 rename、sed、mv 命令。我使用了rename 's/\_L2/\//g' *_L2for i in *; do mv $i echo $i | 之类的命令。 cut -d"_" -f1'`,但我坚持只删除某个下划线后的所有内容,这不是我想要的输出。
  • 操作系统是 Ubuntu 16.04.1 LTS,我使用的是 bash。我对这件事很陌生,所以我相信批处理文件以及批处理和bash之间存在一些混淆。现在一切都好。感谢您的反馈

标签: bash shell sed rename mv


【解决方案1】:

使用rename 实用程序可以做到这一点:

rename -n 's/^([^_]+)_L2(_[^_]+)[^.]+(\..+)$/$1$2$3/' *.gz

一旦对试运行感到满意,请移除 -n 选项并重新运行。

【讨论】:

  • 谢谢@anubhava!结果很完美。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多