【问题标题】:Recursively delete all binary files in folder递归删除文件夹中的所有二进制文件
【发布时间】:2016-03-25 13:37:42
【问题描述】:

我想使用命令行或 bash 脚本递归删除 linux 下文件夹中的所有二进制文件。我找到了

grep -r -m 1 "^"  path/to/folder | grep "^Binary file"

How to list all binary file extensions within a directory tree? 列出path/to/folder 中的所有二进制文件。我现在想删除所有这些文件。 我可以的

grep -r -m 1 "^"  path/to/folder | grep "^Binary file" | xargs rm

但这有点可疑,因为它还试图删除 文件 'Binary'、'file' 和 'matches',如

rm: cannot remove ‘Binary’: No such file or directory
rm: cannot remove ‘file’: No such file or directory
rm: cannot remove ‘matches’: No such file or directory

因此问题是如何正确删除这些文件

【问题讨论】:

  • 这是对“二进制文件”的错误定义。无论如何-我建议您阅读Word Splitting。我很确定您会很快了解问题的根源。
  • 确实有效,谢谢!我确实同意“二进制文件”的这种定义不是很好(参见下面 vesche 的答案及其讨论),但它准确地捕获了我想在给定用例中删除的文件。

标签: linux bash command-line delete-file


【解决方案1】:

此命令将递归返回目录中的所有二进制可执行文件,请先运行此命令以确保正确输出。

find . -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print

如果可行,您可以将输出传递给 xargs 以删除这些文件。

find . -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print | xargs rm -f

希望这对您有所帮助,祝您有美好的一天! :)

【讨论】:

  • 非常感谢您的回答!我还发现了这个命令——问题是这个命令没有正确找到我要删除的编译文件:grep 命令找到大约 50 个文件,例如./src/polynom.o,而你建议的命令只找到一个文件(也可以使用grep)。
  • 啊,我误以为你指的是二进制可执行文件,试试这个:find . -type f -exec sh -c "file -i '{}' | grep -q 'charset=binary'" \; -print
  • 嗯,这可能是我查看的 tar'ed 程序的错误,但该命令还列出了多个原始 c 文件,例如 ./pkg/meataxe/src/zgauss.c,我当然不想删除这些文件。 ..
  • 真奇怪,我真的找到了你正在看的肉斧版本 (math.rwth-aachen.de/~MTX/download.html) 我相信是 2.1 版?这些 .c 文件显示为二进制文件,这是不寻常的。看起来好像这已在更高版本中修复...文件中有非 ascii 字符,看起来像“* MeatAxe-2.0,Phase II.^?”的行。您可以通过 grep -P '[\x7f-\xff]' ./pkg/meataxe/src/* 看到它,这将找到非 ascii 字符。
  • 哇,不错——确实是 1997 年亚琛的 2.2.3 版。
【解决方案2】:

我编写了一个名为 blobs 的工具,它列出了可运行的二进制文件。

它的自述文件提到了如何通过管道传递给任何其他命令。

【讨论】:

    猜你喜欢
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2017-10-05
    • 2012-10-18
    • 2012-07-11
    相关资源
    最近更新 更多