如何修复“参数列表太长”错误?
How to fix ' Argument list too long' error?
我执行了此命令以从文件夹 train 中的大量文件(约 3000 个)中删除所有出现的“#”,
perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/*
但是我得到了这个错误:/bin/bash: /usr/bin/perl: Argument list too long
任何人都可以提出避免此错误的方法吗?
将 globing 留给 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
也可以,而且select可以更灵活地修改哪些文件。
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_glob
。
perl -i -pe'
use File::Glob qw( bsd_glob );
BEGIN { @ARGV = map bsd_glob($_), @ARGV }
s/#//g
' '/Users/Kian/Desktop/Acsegment/espslabs/train/*'
我执行了此命令以从文件夹 train 中的大量文件(约 3000 个)中删除所有出现的“#”,
perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/*
但是我得到了这个错误:/bin/bash: /usr/bin/perl: Argument list too long
任何人都可以提出避免此错误的方法吗?
将 globing 留给 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
也可以,而且select可以更灵活地修改哪些文件。
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_glob
。
perl -i -pe'
use File::Glob qw( bsd_glob );
BEGIN { @ARGV = map bsd_glob($_), @ARGV }
s/#//g
' '/Users/Kian/Desktop/Acsegment/espslabs/train/*'