从文件名中删除模式

Posted

技术标签:

【中文标题】从文件名中删除模式【英文标题】:Remove pattern from filenames 【发布时间】:2014-01-06 23:47:22 【问题描述】:

如何删除具有这种结构的文件名列表中的单词“myfile”?

mywork_myfile_XSOP.txt
mywork_myfile_ATTY.txt
mywork_myfile_ATPY.txt

Desired_output:

mywork_XSOP.txt
mywork_ATTY.txt
mywork_ATPY.txt    

【问题讨论】:

【参考方案1】:

最简单的方法是使用常见的rename 命令,该命令在大多数 Unices 中都可用。

rename 's/^mywork_myfile_/mywork_/' *

这当然希望您位于文件的目录中。这不会覆盖文件。如果需要,只需传递 -f 选项。另外请注意,rename 有多个版本,可能有不同的选项。

【讨论】:

【参考方案2】:

基于this answer 上的“重命名所有文件”将目录中的所有文件从 $filename_h 重命名为 $filename_half?”,这可以是一种方式:

for file in mywork_myfile*txt
do
   mv "$file" "$file/_myfile/"
done

注意它使用 bash 字符串操作如下:

$ file="mywork_myfile_XSOP.txt"
$ echo $file/_myfile/
mywork_XSOP.txt

【讨论】:

嗯,这最干净的方式。尽管它是特定于 bash 的,并且不能在其他 shell 中工作,甚至在其他 Posix 样式的 shell 中也不能工作,但这些天可能没问题。每个人都发布 bash。 这个问题被标记为bash,所以我不会担心POSIX兼容性。也就是说,一般来说,不能假设 bash 是系统外壳 (Ubuntu) 或系统外壳是 bash (Mac OS X) 的当前版本。 嗯,好点,但实际上问题是 not 标记为 bash。 我评论的时候。 我的错,我编辑了问题并根据问题类型添加了bash。删除它。【参考方案3】:

这适用于任何 Posix shell...

#!/bin/sh
for i
  in mywork_myfile_XSOP.txt \
     mywork_myfile_ATTY.txt \
     mywork_myfile_ATPY.txt; do
       set -x
       mv "$i" "$(echo $i | sed -e s/myfile_//)"
       set +x
done

【讨论】:

也不错。另请注意,通常建议使用 $() 而不是 ```` mv 的两个参数也应该被引用。

以上是关于从文件名中删除模式的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Git 中的未暂存更改中删除说“旧模式 100755 新模式 100644”的文件?

从制表符分隔的文件中删除带有模式的字符

如何从存储库索引中删除具有给定模式的多个文件夹?

text 如何从Git中的非分段更改中删除说“旧模式100755新模式100644”的文件?

从多个文件中删除多行文本

如何使用模式匹配从 pyspark 数据框中删除行?