Perl: Comment faire pour supprimer les fichiers, dossiers et sous-répertoires à l'aide de “rm”?
Je suis en train de supprimer des fichiers et des dossiers à l'aide de mon script perl. Je suis à l'aide de la "rm -rf $fichier" commande pour supprimer le fichier mais sa ne fais rien.
Cependant, lorsque j'essaie la même commande sur la ligne de cmd il fonctionne et supprime les fichiers de l'amende juste.
Ci-joint l'extrait de code. Toute aide est appréciée.
for each $f (@files)
{
system "rm -rf $f";
}
J'ai essayé cela sur un couple de machines et de son le même problème. Cependant, j'ai essayé d'utiliser d'autres commandes du système tels que mkdir, goudron etc et il fonctionne très bien.
J'ai aussi essayé de supprimer les liaisons, mais le même problème persiste.
- Avez-vous essayé de lancer ce dans le débogueur?
- Pourquoi voulez-vous utiliser
system
pour supprimer des fichiers? - Pourquoi ne pas utiliser
remove_tree
à partir de File: Chemin d'accès? - Nope. Je suis nouveau sur Perl et je vais donner un coup de cette.
- À tout le moins, protéger des noms de fichiers avec
system rm => -rf => $_
. Il est tout aussi facile que ce que vous avez. Le prendre comme naturelles par défaut et n'utiliser que les autres types d'invocation lorsque vous avez une bonne raison de l'utiliser.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
for
ouforeach
, mais il n'y a pas defor each
. J'ai exécuter le code, une fois que j'ai corrigé cela, les fichiers ont été supprimés.À l'aide de
use strict;
aurait trouvé cela, parce que "chacun" aurait montré comme un simple mot.Voici le code que j'ai utilisé:
Cette supprimé avec succès
a.txt
,b.txt
etc.txt
, donc je peux vous garantir que c'est du code qui fonctionne.Utiliser le débogueur perl pour inspecter @fichiers et vérifier les autorisations sur tous les fichiers que vous tentez de supprimer.
each
est une fonction Perl.for each $f (@files) { ... }
n'est pas valide la syntaxe.Si il y a uniquement les fichiers et pas les dossiers dans votre
@files
tableau, alors vous pouvez aussi utiliser leunlink
de commande qui supprime les fichiers. C'est probablement plus sûr que d'utiliserrm -rf
. Si l'élément/
devient en quelque sorte en votre tableau alors vous pourriez vous retrouver avec une fracture de Linux avecrm -rf
. Délier sur perldoc.