2017-01-09 64 views
-3

我有一个包含大约一千个文件的文件夹。使用更高版本查找文件

有几百个文件与文件名末尾的字符串(2)重复。

找到带有该后缀的文件名最简单的方法是什么,并删除名称中没有(2)的原始文件?

+0

如果您似乎试图自己写一些东西,您将得到更好的答复。你不应该要求你的工作是免费的。 – Borodin

+0

对不起,我做了一些研究,但由于我对任何编码或脚本编程都很陌生,而且我不是母语的人,所以我很满意自己的问题。感谢您提高语法,但您删除了正确的关键字。 –

+1

我想你是在学习,如果你用英语尽力而为,我们大多数人都会理解你。但是你应该阅读Perl几天,并尝试一些你认为可能有用的东西。你很容易写一些你想学习的东西,但是你只问一个解决方案。 – Borodin

回答

-1

我已经找到了解决办法,一点阅读的TechNet后。我在最后使用powershell删除没有sufix的文件并保留较新的文件。我喜欢线上线,所以我想出了这个:

Remove-Item ((Get-ChildItem).FullName -match ".+\(2\).+" -replace "(.+)\s\(2\)(.+)",'$1$2') 

我敢肯定这不是最好的解决方案,但它的工作。

+0

这不是解决您的问题的方法。它不使用Perl也不使用正则表达式 – Borodin

+0

你有点奇怪,是你,从我的问题smarty中删除了powershell和pcregrep标记。 –

+0

*“在阅读technet之后,我找到了解决方案”*阅读之前应该向全世界呼喊以解决您的问题。堆栈溢出是一个度假村,知道自己在做什么的人可以向同事寻求帮助。它不是用于*“我想打印1到10。怎么做?”*。你有一个可怕的解决方案。停下来,做更多的阅读。 – Borodin

3

Perl脚本:

#!/usr/bin/perl 
use warnings; 
use strict; 

my $dir = shift; 

for my $file (glob "$dir/*(2)") { 
    my $original = substr $file, 0, -3; 
    unlink $original if -f $original; 
} 

指定目录名作为参数。为了说明,请参阅

+0

感谢您的帮助choroba,最后我找到了一个更简单的解决方案。我试着首先使用bcregrep从bash中得到类似的解决方案,但我无法用多个捕获组替换匹配的字符串。 –

+0

我低估了这个,因为显然有一个版本控制系统,真正的要求是将所有内容更新到最新版本。所以可能有一个'file(4)'和一个'file(6)',它的命运没有人规定。我不认为我们应该将问题作为工作说明书,无论是本人还是提示需求。 – Borodin

+0

名称中没有大于(2)的文件,在这种情况下将不再有文件。原始文件已损坏,并且带有后缀的文件是正确的。 –