Bash 如何修复';参数列表太长';错误?

Bash 如何修复';参数列表太长';错误?,bash,perl,shell,Bash,Perl,Shell,我执行了这个命令,从文件夹列中的大量文件(大约3000个)中删除所有出现的“#” perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/* 但是我得到了一个错误:/bin/bash:/usr/bin/perl:参数列表太长 有人能建议一种避免此错误的方法吗?将全局优化留给perl而不是有限制的bash perl -pi -e 'BEGIN{ @ARGV = glob(pop) } s/#//g' "/Users/Ki

我执行了这个命令,从文件夹列中的大量文件(大约3000个)中删除所有出现的“#”

perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/*
但是我得到了一个错误:
/bin/bash:/usr/bin/perl:参数列表太长


有人能建议一种避免此错误的方法吗?

将全局优化留给perl而不是有限制的bash

perl -pi -e 'BEGIN{ @ARGV = glob(pop) } s/#//g' "/Users/Kian/Desktop/Acsegment/espslabs/train/*"
或者当全局目录中有空格时

perl -MFile::Glob=bsd_glob -pi -e 'BEGIN{ @ARGV = bsd_glob(pop) } s/#//g' "/Users/Kian/Desktop/Acsegment/espslabs/train/*"

这就是
xargs
的全部内容

ls /Users/Kian/Desktop/Acsegment/espslabs/train |
   xargs perl -i -pe's/#//g'
find
也可以这样做,它允许您更灵活地选择要修改的文件

find /Users/Kian/Desktop/Acsegment/espslabs/train \
   -type f -maxdepth 1 \
   -exec perl -i -pe's/#//g' {} +
当然,您也可以用Perl生成文件列表

perl -i -pe'BEGIN { @ARGV = map glob, @ARGV } s/#//g' \
    '/Users/Kian/Desktop/Acsegment/espslabs/train/*'
但是,除非使用
bsd\u glob
,否则必须在路径中转义空格

perl -i -pe'
   use File::Glob qw( bsd_glob );
   BEGIN { @ARGV = map bsd_glob($_), @ARGV }
   s/#//g
' '/Users/Kian/Desktop/Acsegment/espslabs/train/*'

感谢您的回复ССаа27,我尝试了您的解决方案,但再次收到相同的错误。