使用shell正则表达式处理文件名

时间:2012-10-29 10:22:55

标签: shell

138.096.000.015.00111-138.096.201.072.38717
138.096.000.015.01008-138.096.201.072.00790
138.096.201.072.00790-138.096.000.015.01008
138.096.201.072.33853-173.194.020.147.00080
138.096.201.072.34293-173.194.034.009.00080
138.096.201.072.38717-138.096.000.015.00111
138.096.201.072.41741-173.194.034.025.00080
138.096.201.072.50612-173.194.034.007.00080
173.194.020.147.00080-138.096.201.072.33853
173.194.034.007.00080-138.096.201.072.50612
173.194.034.009.00080-138.096.201.072.34293
173.194.034.025.00080-138.096.201.072.41741

我有很多文件夹里面有很多文件,文件名就像上面那样 我想删除文件名为substring“138.096.000”

的文件

有时候我想得到文件列表,文件名是子字符串“00080”

2 个答案:

答案 0 :(得分:1)

删除名称中包含“138.096.000”的文件:

find /root/of/files -type f -name '*138.096.000*' -exec rm {} \;

列出名称中包含“00080”的文件:

find /root/of/files -type f -name '*00080*'

答案 1 :(得分:0)

rm $(find . -name \*138.096.000\*)

这使用find命令查找适当的文件。这在子shell 中执行,输出(文件列表)由rm使用。注意*模式的转义,因为shell会尝试扩展*本身。

这假设您没有带空格等的文件名。您可能更喜欢这样做:

for i in $(find . -name \*138.096.000\*); do
   rm $i
done

在这种情况下,甚至

find . -name \*138.096.000\* | xargs rm

请注意,在上面的循环中,您将为每个文件执行rmxargs变体将多次执行rm(取决于您拥有的文件数量 - 它可能只执行一次。)

但是,如果您使用的是zsh,那么您只需执行以下操作:

rm **/*138.096.000*

(我假设您的目录没有像您的文件一样命名。请注意Kamil的答案中使用的-f标志,如果是这样的话)