我在UNIX的目录下有几百个PDF.PDF的名称非常长(大约60个字符).
当我尝试使用以下命令一起删除所有PDF时:
rm -f *.pdf
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/bin/rm: cannot execute [Argument list too long]
Run Code Online (Sandbox Code Playgroud)
这个错误的解决方案是什么?这个错误是否也出现在命令mv和cp命令中?如果是,如何解决这些命令?
在bash(或其他shell)中是否存在某种字符限制,可以输入多长时间?如果是这样,那个字符限制是什么?
即是否可以在bash中编写一个命令行执行时间过长的命令?如果没有要求的限制,是否有建议的限制?
可以传递给命令行多长时间sh -c ''?(在bash和bourne shell中)
该限制远低于操作系统的限制(在现代Linux的情况下).
例如:
$ /bin/true $(seq 1 100000)
$ /bin/sh -c "/bin/true $(seq 1 100000)"
bash: /bin/sh: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我怎么能绕过这个问题呢?
更新
我想注意到getconf这里无法帮助(因为这不是系统限制):
$ seq 1 100000 | wc -c
588895
$ getconf ARG_MAX
2097152
Run Code Online (Sandbox Code Playgroud)
更新#2
现在我明白了这里有什么意义.这不是shell限制,即系统限制,但是对于每个参数的长度,而不是整个arglist.
$ /bin/true $(seq 1 100000)
$ /bin/true "$(seq 1 100000)"
bash: /bin/true: Argument list too long
Run Code Online (Sandbox Code Playgroud)
谢谢CodeGnome的解释.
我试图运行以下命令,但得到参数太长的错误.你能帮我吗?.
HOST# grep -rl 'pattern' /home/*/public_html/*
-bash: /bin/grep: Argument list too long
Run Code Online (Sandbox Code Playgroud)
有没有办法覆盖此错误并grep我想要在所有用户public_html目录中的模式匹配文件.同一台服务器中大约有500多个用户.
我试图在我的Ubuntu服务器中将大约700,000个.jpg文件从一个目录移动到另一个目录.我尝试了以下方法:
xargs mv * -t /var/www/html/
Run Code Online (Sandbox Code Playgroud)
和
echo (*.jpg|*.png|*.bmp) | xargs mv -t /var/www/html/
Run Code Online (Sandbox Code Playgroud)
和
echo (*.jpg) | xargs mv -t /var/www/html/
Run Code Online (Sandbox Code Playgroud)
和
find . -name "*.jpg" -print0 | xargs mv * ../
Run Code Online (Sandbox Code Playgroud)
它们都给我同样的错误:/ usr/bin/xargs:参数列表太长了
我该怎么办?请帮帮我.谢谢 :)
我试图清除一些垃圾邮件,但遇到了一个问题。队列中的文件数量太大,我通常的命令无法处理。它会给我一个关于太多参数的错误。
我通常这样做
grep -i user@domain.com 1US* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
1US* 可以是 1US[a-zA-Z] 之间的任何值。我唯一能做的就是运行这个可怕的装置。它的一个文件,包含 1USa、1USA、1USb 等,贯穿整个字母表。我知道他们必须是一种更有效地运行它的方法。
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USa* | awk -F: '{print $1}' | xargs rm
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USA* | awk -F: '{print $1}' | xargs rm
Run Code Online (Sandbox Code Playgroud) 我试图列出我们在一个月内收到的所有文件
文件名模式将是
20110101000000.txt
YYYYMMDDHHIISS.txt
Run Code Online (Sandbox Code Playgroud)
整个目录有数百万个文件.一个月内最少可以有50000个文件.子目录的想法仍然悬而未决.有没有办法列出文件名几乎相似的大量文件.
grep -l 20110101*
Run Code Online (Sandbox Code Playgroud)
我正在尝试这个并返回错误.我尝试php花了很长时间,这就是为什么我使用shell脚本.我不明白为什么外壳也没有给出结果任何建议请!!
我有数千个 JSON 文件,我想将它们合并为一个。我正在使用下面的命令来做到这一点。
jq -s . -- *.json > result.json
Run Code Online (Sandbox Code Playgroud)
但是我收到参数列表太长错误,可能是因为我尝试合并的文件数量太多。这个问题有什么解决方法吗?
我试图在文件夹中的所有文本文件上执行python脚本:
for fi in sys.argv[1:]:
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
-bash: /usr/bin/python: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我称之为Python函数的方式如下:
python functionName.py *.txt
Run Code Online (Sandbox Code Playgroud)
该文件夹有大约9000个文件.有没有办法运行此功能,而不必将我的数据拆分到更多的文件夹等?拆分文件不太实用,因为我将来必须在更多文件中执行该功能...谢谢
编辑:根据选定的正确回复和回复者(Charles Duffy)的评论,对我有用的是:
printf '%s\0' *.txt | xargs -0 python ./functionName.py
Run Code Online (Sandbox Code Playgroud)
因为我没有有效的shebang ..