SSH执行ls相关命令存输出到文件时如何忽略错误不中断
问题解决方案
1. 现有命令修复版
你遇到的进程终止核心原因是命令执行产生的标准错误没有被过滤,且xargs遇到无效输入会主动终止,修改后可用的命令如下:
find /downloads/ -type d ! -writable -print0 2>/dev/null | xargs -0 -r -I{.} find {.} -maxdepth 1 -type f -print0 2>/dev/null | xargs -0 -r -I% ls -l % 2>/dev/null > myfile.txt
改动说明:
- 每个子命令末尾加
2>/dev/null,直接丢弃所有错误输出,错误不会触发进程终止 - xargs添加
-r参数,前序管道无输出时不会执行后续命令,避免空输入报错 - 所有管道传递的文件名统一用
\0分隔,兼容含空格、特殊字符的文件名,减少无效报错
2. 更优实现方案(推荐)
不需要多层管道调用xargs和ls,find本身即可完成所有需求,执行效率更高、报错概率更低:
find /downloads/ -type f -execdir test ! -writable . \; -ls 2>/dev/null > myfile.txt
这个命令的逻辑完全匹配你的需求:直接查找所有所在目录无写入权限的普通文件,用内置-ls参数输出和ls -l完全一致的格式,所有错误直接丢弃不会终止执行。
如果后续要用Python统计总大小,可以直接输出文件字节数,省去解析ls长格式的步骤:
find /downloads/ -type f -execdir test ! -writable . \; -printf "%s\n" 2>/dev/null > filesizes.txt
Python读取该文件时直接逐行转整数求和即可,逻辑更简单不易出错。
内容的提问来源于stack exchange,提问作者Harshit Jindal
相关产品推荐
相关产品推荐

