La commande ci-dessous dans le script perl échoue s'il y a beaucoup de fichiers dans @file_to_tar, mais cela fonctionne bien si nous avons moins de fichiers dans le tableau (@file_to_tar).
my $ tar_command = "cd $ ProcVars -> {dropbox_dir}; tar -cvzf SmartMiles. $ ProcVars -> {batch_nb} .tar.gz -P @file_to_tar --remove-files";
Quelqu'un peut-il m'aider à résoudre le problème.
3 Réponses :
Le meilleur moyen est de transmettre une très longue liste de fichiers à tar
en utilisant l'option --from-file
:
tar -czf myarchive.tar.gz -P --from-file=$filelist --remove-files
Vous pouvez également lui faire lire la liste des fichiers à partir de l'entrée standard en utilisant --from-file = -
Voir https://www.gnu.org/software/tar/manual/html_node/files.html pour plus d'informations .
Merci beaucoup Bill pour votre suggestion. Je l'ai fait ci-dessous et cela fonctionne maintenant mon $ file_location = "$ ProcVars -> {dropbox_dir} /Archive_Files.csv"; open (DATA, "> $ file_location") ou die $ !; foreach $ a (@file_to_tar) {print DATA "$ a \ n"; } fermer DATA; my $ tar_command = "cd $ ProcVars -> {\ dropbox_dir}; tar -czf ABC. $ ProcVars -> {batch_nb} .tar.gz -P --files-from $ file_location --remove-files";
Vous pourriez envisager, plutôt que d'appeler une commande shell, d'utiliser le module Archive :: Tar Perl à la place. En particulier, la rel = "nofollow noreferrer"> create_archive ". Cela éviterait également tout problème potentiel résultant de caractères spéciaux ou d'espaces dans les noms de fichiers interprétés par le shell que votre code Perl appelle.
Salut Michael, Merci pour la réponse. Archive :: Tar n'est pas disponible dans notre commun Perl-core. J'ai donc utilisé --from-file = $ filelist et cela fonctionne très bien.
cela fonctionne maintenant. my $ file_location = "$ ProcVars -> {dropbox_dir} /Archive_Files.csv"; open (DATA, "> $ file_location") ou die $ !; foreach $ a (@file_to_tar) {print DATA "$ a \ n"; } fermer DATA;
my $ tar_command = "cd $ ProcVars -> {\ dropbox_dir}; tar -czf ABC. $ ProcVars -> {batch_nb} .tar.gz -P --files-from $ file_location --remove-files";