【问题标题】:error /usr/local/bin/perl: Argument list too long错误 /usr/local/bin/perl: 参数列表太长
【发布时间】:2011-03-12 04:30:46
【问题描述】:

我执行了这个命令来从我所有的网站文件中删除恶意软件并保留每个文件的备份,但是在执行 1 分钟后出现错误 /usr/local/bin/perl: 参数列表太长

任何人都可以提出一种避免此错误的方法,PS ive 有大量文件:)

 perl -e "s/<script.*PaBUTyjaZYg.*script>//g;" -pi.save $(find /home/ -type f -name '*php*')

【问题讨论】:

    标签: regex linux perl shell


    【解决方案1】:

    使用 xargs 命令从 STDIN 读取文件名并多次运行该命令,将尽可能多的文件名传递给目标命令的每次调用

    find /home/ -type f -name '*php*' -print0 | xargs -0 perl -e "s/<script.*PaBUTyjaZYg.*script>//g;"
    

    find 的 print0 参数与 xargs 的 -0 参数一起使用,以确保文件名以空字符结尾。这可以防止带有嵌入空格的文件名导致错误。

    【讨论】:

    • xargs 甚至有一个 -n 命令来控制每次调用将传递的参数数量,这是我偶尔需要的。
    • 史蒂夫,完美,非常感谢,另一个提示,现在我需要删除所有以 *.php.save 结尾的文件
    • xargs 只是为您构建一个命令列表,因此您只需进行查找并将其传递给 xargs rm 就像这样find /home/ -type f -name '*.php.save' -print0 |xargs -0 rm
    • 太棒了,如果我想删除所有文件名和扩展名为 .php 的文件怎么办?
    • 好吧,您只是在构建 find 命令并将它们传递给 xargs,因此请查看手册页以查找 find 但这应该会找到名称中带有数字和 .php 扩展名的所有文件find /home/ -type f -name '*[0-9]*.php跨度>
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2016-08-25
    • 2014-08-30
    • 2015-04-27
    • 2018-07-24
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多