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

Kia*_*tar 4 bash shell perl

香港专业教育学院执行此命令,从文件夹列车中的大量文件(约3000)中删除所有出现的"#",

perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/*
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误: /bin/bash: /usr/bin/perl: Argument list too long

任何人都可以建议一种方法来避免这个错误?

ike*_*ami 7

xargs就是全部.

ls /Users/Kian/Desktop/Acsegment/espslabs/train |
   xargs perl -i -pe's/#//g'
Run Code Online (Sandbox Code Playgroud)

find 也可以这样做,它允许您更灵活地选择要修改的文件.

find /Users/Kian/Desktop/Acsegment/espslabs/train \
   -type f -maxdepth 1 \
   -exec perl -i -pe's/#//g' {} +
Run Code Online (Sandbox Code Playgroud)

当然,您也可以在Perl中生成文件列表.

perl -i -pe'BEGIN { @ARGV = map glob, @ARGV } s/#//g' \
    '/Users/Kian/Desktop/Acsegment/espslabs/train/*'
Run Code Online (Sandbox Code Playgroud)

但除非你使用,否则必须在路径中转义空格bsd_glob.

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


Сух*_*й27 6

留下perl而不是有限制的bash,

perl -pi -e 'BEGIN{ @ARGV = glob(pop) } s/#//g' "/Users/Kian/Desktop/Acsegment/espslabs/train/*"
Run Code Online (Sandbox Code Playgroud)

或者什么时候在globed目录中的空格,

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