从文件名中删除模式
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”的文件?