查找并执行:处理包含撇号的文件名

查找并执行:处理包含撇号的文件名

我有以下脚本来批量加密文件:

#!/bin/bash
find "/some/dir" -type f -exec bash -c "gpg -e -r [email protected] '{}' && rm '{}'" \;

该脚本工作正常,除非文件名包含撇号。然后 gpg 打印一个关于不正确语法的错误。如何处理这些文件?

答案1

我认为这也可以在不调用 shell 的情况下完成:

find "/some/dir" -type f -exec gpg -e -r [email protected] {} \; -exec rm {} \;

或者

find "/some/dir" -type f -exec gpg -e -r [email protected] {} \; -delete

这应该有效,因为-exec ... \;也充当条件,所以如果gpg失败,以下-exec-delete将不会运行。

答案2

不要将{}文件名嵌入到 shell 代码中间,而是将其作为参数传递给 shell。

像这样:

find "/some/dir" -type f -exec bash -c '
    gpg -e -r [email protected] "$1" && echo rm "$1"
' bash {} \;

echo当输出令人满意时删除语句。


恕我直言,这是一个非常有趣的概念,不仅对于这种特殊情况,这是工具箱中的一个技巧;)

相关内容