bash脚本批量截断一个目录中的文件名

时间:2011-01-22 22:17:02

标签: bash

这个问题在其他问题中有点独特 我有一个带有一堆文件夹的目录,它们用句点命名以分隔每个单词 例如:foo.bar.2011.useless.words
最后两个单词总是无用的,所以我想从第二个到最后一个句点开始截断 不确定措辞......
非常感谢

2 个答案:

答案 0 :(得分:1)

for file in *.*.*
do
  mv "$file" "${file%.*.*}"
done

答案 1 :(得分:0)

如果带点的文件夹只有一个深度,请使用Ignacio的答案。但是,如果您要重命名的文件夹存在于/toplevel/subdir1/foo.bar.baz.blah/等子目录中,那么您需要使用下面的find命令。除非您有Bash 4.x,否则您可以使用shopt -s globstar选项。

find /top/level/dir -type d -name '*.*.*' -exec sh -c 'for arg; do echo mv "$arg" "${arg%.*.*}"; done' _ {} +

我在那里添加了一个echo,这样你就可以做一个干运行而不做任何改动。如果您对输出感到满意,请删除echo并再次运行以使更改成为永久更改。

修改 通过无耻地窃取Ignacio的PE

删除了我的$tmp var