将 "ls" 命令的输出存储到文件中,同时忽略任何错误

Store output of "ls" command to file while ignoring any errors

所以我 运行 在远程服务器上通过 ssh 执行命令,我需要存储该命令的所有输出,但它会在遇到 [=12= 这样的错误时立即停止].有没有办法在忽略任何错误的同时保持流程继续进行。如果我什至没有被告知发生错误也没关系,因为我知道这些只是少数文件(总共 16TB 中不到 100MB)。

这是我的命令:

find /downloads/ -type d ! -writable -print0 | xargs -0 -I{.} find {.} -maxdepth 1 -type f | xargs -I% ls -l % > myfile.txt

我试图用这个命令实现的是:

  1. 查找(递归地)所有我不可写的目录
  2. 列出这些不可写目录的直接子目录的文件
  3. 使用 ls -l <filename>
  4. 获取这些文件的长列表格式
  5. 将此输出存储在一个文件中,以便稍后我可以运行一个python脚本来获取所有已识别文件的总大小

我这样做的原因是为了识别共享服务器上所有我无法删除的文件,如果我尝试的话。也请让我知道是否有更好的方法来实现这个目标...

非常感谢!

你不应该得到像 ls: cannot access '/downloads/something.txt': No such file or directory 这样的错误,因为你正在使用 find 来获取 ls 的输入。你得到它们的原因是你的命令缺少一些 -print0-0 选项。也就是说,您可能应该将 stderr 从前两个管道命令重定向到 /dev/null 以防出现任何 Permission denied 错误。进行这些更改后,您的命令应如下所示:

find /downloads -type d ! -writable -print0 2>/dev/null | xargs -0 -I{.} find {.} -maxdepth 1 -type f -print0 2>/dev/null | xargs -0 -I % ls -l % > myfile.txt

此命令应该不会产生错误,但如果必须扫描 16TB,则可能需要一段时间。

您可能还想尝试下面的命令,看看它是否更快:

find /downloads -type d ! -writable -exec find {} -maxdepth 1 -type f -print0 \; 2>/dev/null | xargs -0 -I % ls -l % > myfile.txt