我已执行此命令从文件夹列中的大量文件(约3000)中删除所有出现的“#”,
perl -pi -e "s/#//g" /Users/Kian/Desktop/Acsegment/espslabs/train/*
但是我收到了这个错误:/bin/bash: /usr/bin/perl: Argument list too long
有人可以建议一种避免此错误的方法吗?
答案 0 :(得分:7)
那是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_glob
,否则必须在路径中转义空格。
perl -i -pe'
use File::Glob qw( bsd_glob );
BEGIN { @ARGV = map bsd_glob($_), @ARGV }
s/#//g
' '/Users/Kian/Desktop/Acsegment/espslabs/train/*'
答案 1 :(得分:6)
留下perl而不是有限制的bash,
perl -pi -e 'BEGIN{ @ARGV = glob(pop) } s/#//g' "/Users/Kian/Desktop/Acsegment/espslabs/train/*"
或在globed目录中的空格,
perl -MFile::Glob=bsd_glob -pi -e 'BEGIN{ @ARGV = bsd_glob(pop) } s/#//g' "/Users/Kian/Desktop/Acsegment/espslabs/train/*"