这是一个将多个相同模式文件连接成一个大文件的命令。在文件夹中我有 77k 个文件,我得到Argument list too long
示例文件名是每分钟:cartreset-2014-05-08-01-12.log
rm -f /tmp/temp.files
ls -1 /var/log/processing/*.log | \
xargs -n1 basename > /tmp/temp.files
cat /tmp/temp.files | \
sed -r "s~(.*)-[0-9]{4}(-[0-9]{2})+\.log~cat /var/log/processing/\1* >> /var/log/processing/\1$(date +"-%Y-%m-%d-%H-%M").log~" | \
uniq | \
sh
cd /var/log/processing
xargs rm -rf < /tmp/temp.files
rm -f /tmp/temp.files
sh: /bin/ls: Argument list too long
我有什么选择?
您的完整代码是:
rm -f /tmp/temp.files
ls -1 /var/log/processing/*.log | xargs -n1 basename > /tmp/temp.files
cat /tmp/temp.files | sed -r "s~(.*)-[0-9]{4}(-[0-9]{2})+\.log~cat /var/log/processing/\1* >> /var/log/processing/\1$(date +"-%Y-%m-%d-%H-%M").log~" | uniq | sh
cd /var/log/processing
xargs rm -rf < /tmp/temp.files
rm -f /tmp/temp.files
但问题就出在ls -1 /var/log/processing/*.log
部分,所以我跳过其余部分。
扩展由/var/log/processing/*.log
给出了如此多的结果ls
它本身无法处理所有这些,因此会打印“参数列表太长”消息。
您可以使用find
像这样的声明:
find /var/log/processing -name "*.log" -exec basename {} \; > /tmp/temp.files
看看我没有使用 ls 解析(读有趣为什么你不应该解析 ls 的输出).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)