2017-01-09 7 views
-3

私はそれに約千のファイルを持つフォルダがあります。それ以降のバージョンのファイルを見つける

ファイル名の末尾に文字列(2)を含む数百のファイルが重複しています。

その接尾辞付きのファイル名を見つけて、名前に(2)が含まれていない元のファイルを削除する最も簡単な方法は何でしょうか?

+0

自分で何かを書き込もうとすると、より良い返答が得られます。あなたはあなたの仕事が無料で済むように求めてはいけません。 – Borodin

+0

申し訳ありませんいくつかの調査をしましたが、コーディングやスクリプト作成にはまったく新しく、ネイティブスピーカーでもないので、私は自分の質問に満足していました。文法を改善してくれてありがとう、あなたは正しいキーワードを削除しました。 –

+1

私はあなたが学んでいると想像しています。あなたが英語で最善を尽くせば、ほとんどの人があなたを理解するでしょう。しかし、数日はPerlについて読んで、うまくいくと思うものを試してみるべきです。あなたが学びたいと言ったことを書くのは簡単でしょうが、解決策だけを求めます。 – Borodin

答えて

-1

を参照してください。私は最後にpowershellを使用して、sufixなしでファイルを削除し、新しいファイルを保持しました。私はそれが最善の解決策ではないと確信していますが、それは働いた

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

:私はこの思い付いたので、私はonelinersが好き。

+0

これはあなたの問題の解決策ではありません。それはPerlも正規表現も使用していません – Borodin

+0

あなたはちょっと変わっています。それは私の質問からpowershellとpcregrepタグを削除したあなたです。 –

+0

*「少し読んだ後に解決策を見つけました」*あなたの問題を解決するために、その読みがあなたの叫びに先行していたはずです。スタックオーバーフローは、彼らが何をしているのか知っている人々が、同僚に助けを求めることができるリゾートです。 *「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; 
} 

は、引数としてディレクトリ名を指定します。説明については、私はTechNetのを読んだのビットの後に、解決策を見つけた

+0

ヘルプチョロバをありがとう、最後に私はより単純な解決策を見つける。私は思いついた解決策と同じようなaproachを最初にbashからpcregrepを使用しようとしましたが、複数のキャプチャグループに一致する文字列を置き換えることができませんでした。 –

+0

私はバージョン管理システムがはっきりとあり、本当の必要条件はすべてを最新のバージョンに更新することであるため、これを打ち消しました。だから誰も処刑したことのない 'file(4)'と 'file(6)'があるかもしれません。私は、必要とされるものに対して、原則として、あるいはヒントとして、仕事の仕様として質問をするべきだとは思わない。 – Borodin

+0

名前に(2)より大きいファイルが存在しないため、この場合はファイルはもうありません。元のファイルは破損しており、接尾辞付きのファイルは正しいものです。 –

関連する問題