C-shell fails to execute commands with arguments using wildcard characters.
eg.,
% \rm -rf *
Arguments too long
% ls -l | wc
8462 76151 550202
The reason for this failure is that the wildcard has exceeded C-shell limitation(s). The command in this example is evaluating to a very long string. It overwhelmed the
csh
limit of 1706, for the maximum number of arguments to a command for which filename expansion applies.Workarounds:
- Use multiple commands Or
- Use
xargs
utility% \rm -rf *
Or
Arguments too long
% ls | xargs rm -rf
% ls
%% \rm -rf *
Arguments too long
% find . -name "*" | xargs rm -rf
% ls
%
From Jerry Peek's Handle Too-Long Command Lines with xargs:
xargs
reads a group of arguments from its standard input, then runs a UNIX command with that group of arguments. It keeps reading arguments and running the command until it runs out of arguments.- The shell's backquotes do the same kind of thing, but they give all the arguments to the command at once. That's the main reason for the
Arguments too long
error, when the shell reaches its limitations
Reference:
Man page of
csh
Thanks to Chris Quenelle for suggesting the
xargs
workaround
You can use the xargs command to handle long argument lists.
ReplyDelete/bin/ls | xargs rm -rf
I didn't try that, but that's the gist of it.