2013-03-15 3 views
1

Je suis très nouveau à Perl, et je voudrais faire un programme qui crée un répertoire et déplace un fichier dans ce répertoire en utilisant la commande Unix:Commandes Unix en Perl?

mkdir test 

Ce que je sais ferait un répertoire appelé "tester". De là, je voudrais donner plus d'options comme:

mv *.jpg test 

Cela déplacerait tous les fichiers .jpg dans mon nouveau répertoire.

Jusqu'à présent, j'ai ceci:

#!/usr/bin/perl 

print "Folder Name:"; 
$fileName = <STDIN>; 
chomp($fileType); 

$result=`mkdir $fileName`; 
print"Your folder was created \n"; 

Quelqu'un peut-il me aider avec ça?

+2

Perl a sa propre 'utiliser la fonction mkdir' ... – jordanm

+2

' stricte; utiliser les avertissements; ' – mob

+0

http://www.perlmonks.org/?node_id = 627015 – toolic

Répondre

3

Essayez de faire ceci:

#!/usr/bin/perl 

use strict; use warnings; 

print "Folder Name:"; 
$dirName = <STDIN>; 
chomp($dirName); 

mkdir($dirName) && print "Your folder was created \n"; 
rename $_, "$dirName/$_" for <*.jpg>; 

Vous aurez un meilleur contrôle lors de l'utilisation intégrée perl fonctions que l'utilisation des commandes Unix. C'est le point de mon extrait.

+0

+1 - Avez-vous copier mon lien? –

+0

Merci @sputnick, mais il me donne ceci: Votre dossier a été créé Utilisation: mv [-f | -i | -n] [-v] cible source mv [-f | -i | -n] [-v] source ... répertoire – Scope

+0

Un mélange entre votre lien et le haut de ma tête;) –

1

La plupart (sinon toutes) les commandes Unix ont une version correspondante en fonction

par exemple

mkdir - voir here

mv - Voir here

Etc soit obtenir une impression sur les différentes pages de manuel (ou probablement un voyage à la librairie - le livre de coquille de noix d'O'Reilly est assez bon avec d'autres).

+0

+1 pour le rappel! =) –

0

En perl, vous pouvez utiliser les commandes bash en backticks. Cependant, que se passe-t-il lorsque le répertoire n'est pas créé par la commande mkdir? Votre programme n'est pas averti de cela et continue sur sa voie joyeuse en pensant que tout va bien.

Vous devez utiliser une commande intégrée dans Perl qui fait la même chose.

Il est beaucoup plus facile d'intercepter les erreurs avec ces fonctions et échouent avec élégance. En outre, ils s'exécutent plus rapidement car vous n'avez pas besoin d'un nouveau processus pour chaque commande que vous exécutez.

0

Perl a des fonctions similaires à celles du shell. Vous pouvez simplement utiliser

mkdir $filename; 

Vous pouvez utiliser backquotes pour exécuter une commande shell, mais il est utile que si la commande retourne quoi que ce soit à sa sortie standard, qui mkdir ne fonctionne pas. Pour les commandes sans sortie, utilisez system:

0 == system "mv *.jpg $folder" or die "Cannot move: $?"; 
Questions connexes