【问题标题】:Run a command on a list of files在文件列表上运行命令
【发布时间】:2021-07-28 07:28:24
【问题描述】:

ubuntu 中的命令shred 不会递归地粉碎文件。因此,我想通过find -L 列出目录中的所有文件,然后使用shred 粉碎这些文件。 但是,find -L | shred 不起作用。有人可以帮我这样做吗?

提前致谢。

【问题讨论】:

  • 查看-execdir 选项到find
  • @ShawnBrar :您的find 还会根据符号链接爬取所有子目录进行粉碎。错误地将指向/ 的符号链接放置在其中一个子目录中,然后您将文件系统上您具有写入权限的所有文件粉碎。
  • @ShawnBar :请参阅选项 -execfind。您还可能必须在 find 命令中使用 -type f
  • 到目前为止你尝试过什么?你被困在哪里了?这甚至与编程有关吗?

标签: linux bash ubuntu


【解决方案1】:

您实际上可以像这样使用 GNU Parallel 非常简单地并行完成它们:

find -L -type f -print0 | parallel -0 -X shred

【讨论】:

    【解决方案2】:

    find | shred 就像您只运行 shred 然后开始在终端中输入要分解的路径一样。但是shred 并不关心标准输入。它只分解作为参数给出的路径。

    要将find 打印的路径作为参数传递给另一个程序,您可以使用xargs,或者更好的是find -exec

    这里我们也只粉碎文件,因为shred someDirectory 只会打印一个错误。

    find -L -type f -exec shred {} +
    

    提醒:根据您的文件系统和硬件,shred 可能不会覆盖物理原始文件。尤其是像具有 CoW 机制的 Btrfs 和具有磨损均衡的 SSD 这样的文件系统是有问题的。

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多