2010-03-30 4 views
2

Comment puis-je geler plusieurs répertoires et également ajouter des fichiers avec un modèle comme '.txt' et exclure certains répertoires et exclure certains modèles comme '.exe' tous dans un seul fichier tar. Le point principal est le nombre de répertoires sont inconnus (dynamique), donc je dois passer à travers je suppose?Comment gorger plusieurs fichiers en Perl?

+0

remerciements pour la correction !! – superstar

Répondre

1

En supposant que vous avez travaillé ce que les fichiers que vous souhaitez en utilisant Fichier :: Trouvez alors quelque chose comme

my @dir = qw/a b/ ; 
    system "tar -cvf mytar @dir" ; 

pourrait fonctionner. Mais vous pourriez trouver que la ligne de commande est trop longue.

Dans ce cas, peut-être écrire la liste des fichiers dans un fichier et utilisez l'option

--files-from=NAME 

(et s'il vous plaît ne me dites pas que vous n'êtes pas autorisé à écrire dans des fichiers)

+0

Il se cassera si l'un des noms de fichiers inclut un caractère avec une signification spéciale pour le shell. Fournissez des arguments en tant que liste après l'argument PROGRAM. – Quentin

+0

vous parlez probablement de ma première suggestion. Les fichiers dans --file-from seraient en sécurité contre cela. – justintime

7

J'utilise Archive::Tar et POPULATE @filelist avec Class::Path (en particulier Class::Path::Dir méthode « s recurse)

+0

Je ne peux pas utiliser Archive :: Tar, parce que j'utilise l'appel système pour créer un fichier tar (c'est l'exigence) $ tarExe = "$ toolDir/bin/gnu_tar/$ {binPlatform} /tar.exe"; système ("$ {tarExe} -cvf $ tarname $ location"); – superstar

+1

Vous avez une obligation de le faire à la dure? Il n'y a pas de bonne raison de le faire sur un vrai projet. Est-ce que ce sont les devoirs? – Quentin

+0

J'ai besoin d'utiliser tar.exe du dossier winx64 pour créer le fichier tar. C'est la méthode standard que l'on m'a suggéré de faire. C'est un vrai projet pour créer des fichiers tar. – superstar

0

Si pour une raison quelconque vous ne pouvez pas, ou ne sont pas autorisés à, installer des modules supplémentaires au-delà du système de base, vous pouvez utiliser File::Find au lieu de Class :: Path.

Il semble que vous sachiez déjà comment appeler la commande tar du système, donc je vais m'en tenir à cela.

Questions connexes