2017-09-29 12 views
2

J'ai écrit le code ci-dessous pour garder un fichier qui correspond au nom passé et supprime le reste des fichiers dans le dossier.Enlever le fichier en utilisant le nom contient dans Ruby

def removeFiles2(path, namePart) 
    aft_logger=AFTLogger.new 

    Dir[path+'/*'].each do |fname| 
    break if !(fname.include? namePart) 
      else File.delete(fname) 
      end 
    end 
end 
end 

Mais je reçois l'erreur ci-dessous.

Operation not permitted - Operation not permitted - //CSLK-CISP-81-01/jboss/server/TeamCI_CEPHEUS_OR_R81_Spider_110/home/RoSModule/XML/In/Error: 
Operation not permitted - Operation not permitted - //CSLK-CISP-81- 
01/jboss/server/TeamCI_CEPHEUS_OR_R81_Spider_110/home/RoSModule/XML/In/Error tempDevMode.rb line 37 in function test 

Qu'est-ce que je fais mal ici? Toute aide serait très appréciée.

+0

Est-ce que c'est votre code actuel? Cela soulèverait une erreur de syntaxe en raison de la construction du modificateur if-else (il n'y a pas de telle chose). Vous pouvez écrire 'break if condition' mais pas' break si condition else ... ' – Stefan

+0

@Stefan vous avez manqué misaligned' end' :) C'est en fait 'break (if .. else .. end)'. – mudasobwa

+0

Oui, cette pause est super confuse :) Et c'est certainement une erreur de syntaxe (comme écrit, sans parenthèses explicites autour de if/else) –

Répondre

2

Ci-dessous le code devrait fonctionner. il suffit de l'essayer

def removeFiles(path, namePart) 

Dir[path+'/*'].each do |fname| 
    if fname.include? namePart 
    //just print something you want 

    else 
     File.delete(fname) 
    end 
end 
end 
0

Pourquoi ne pas simplement supprimer tous les fichiers, sauf si les fichiers basename correspond au fichier que vous voulez exclure

def remove_files(path, exclude) 
    Dir.glob("#{path}/*").each do |file| 
    File.delete(file) unless File.basename(file).include?(exclude) 
    end 
end