2017-01-09 86 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)的文件,在這種情況下將不再有文件。原始文件已損壞,並且帶有後綴的文件是正確的。 –