无法在perl中执行“/bin/sh”:参数列表太长

无法在perl中执行“/bin/sh”:参数列表太长,perl,tar,Perl,Tar,如果@file_to_tar中有许多文件,perl脚本中的Below命令将失败,但如果数组@file_to_tar中的文件较少,则该命令可以正常工作 my$tar_command=cd$ProcVars->{dropbox_dir};tar-cvzf SmartMiles.$ProcVars->{batch_nb}.tar.gz-P@file_to_tar-删除文件 谁能帮我解决这个问题吗 最好的方法是使用-from file选项将很长的文件列表传递给tar: 还可以使用-from file=-

如果@file_to_tar中有许多文件,perl脚本中的Below命令将失败,但如果数组@file_to_tar中的文件较少,则该命令可以正常工作

my$tar_command=cd$ProcVars->{dropbox_dir};tar-cvzf SmartMiles.$ProcVars->{batch_nb}.tar.gz-P@file_to_tar-删除文件


谁能帮我解决这个问题吗

最好的方法是使用-from file选项将很长的文件列表传递给tar:

还可以使用-from file=-使其从标准输入读取文件列表


有关更多信息,请参阅。

最好的方法是使用-from file选项将一个很长的文件列表传递给tar:

还可以使用-from file=-使其从标准输入读取文件列表


<>请参阅更多信息。

,您可以考虑,而不是使用Shell::TAR Perl模块,而不是调用shell命令。特别是方法。这也将回避由Perl代码调用的shell解释的文件名中的特殊字符或空白引起的潜在问题。

您可以考虑,而不是使用Shell::TAR Perl模块代替调用shell命令。特别是方法。这还可以避免由您的Perl代码调用的shell解释的文件名中的特殊字符或空格所引起的任何潜在问题。

它现在正在工作。 my$file_location=$ProcVars->{dropbox_dir}/Archive_Files.csv;openDATA,>$file_location或die$!;foreach$a@file_to_tar{print DATA$a\n;}关闭数据

my$tar_command=cd$ProcVars->{\dropbox_dir};tar-czf ABC.$ProcVars->{batch_nb}.tar.gz-P-files from$file_location-remove files

它现在正在工作。 my$file_location=$ProcVars->{dropbox_dir}/Archive_Files.csv;openDATA,>$file_location或die$!;foreach$a@file_to_tar{print DATA$a\n;}关闭数据


my$tar_command=cd$ProcVars->{\dropbox_dir};tar-czf ABC.$ProcVars->{batch_nb}.tar.gz-P-files from$file_location-remove files

非常感谢比尔的建议。我在下面做了,它现在正在运行我的$file_location=$ProcVars->{dropbox_dir}/Archive_Files.csv;openDATA,>$file_location或die$!;foreach$a@file_to_tar{print DATA$a\n;}关闭数据;my$tar_command=cd$ProcVars->{\dropbox_dir};tar-czf ABC.$ProcVars->{batch_nb}.tar.gz-P-files from$file_location-remove files;非常感谢比尔的建议。我在下面做了,它现在正在运行我的$file_location=$ProcVars->{dropbox_dir}/Archive_Files.csv;openDATA,>$file_location或die$!;foreach$a@file_to_tar{print DATA$a\n;}关闭数据;my$tar_command=cd$ProcVars->{\dropbox_dir};tar-czf ABC.$ProcVars->{batch_nb}.tar.gz-P-files from$file_location-remove files;嗨,迈克尔,谢谢你的回复。Tar在我们的Perl核心公共文件中不可用。所以我使用了-from file=$filelist,它工作得很好。Tar在我们的Perl核心公共文件中不可用。所以我使用了-from file=$filelist,它工作得很好。
tar -czf myarchive.tar.gz -P --from-file=$filelist --remove-files