GNU Parallel - 将输出重定向到具有特定名称的文件

Cri*_*a23 5 linux bash gnu-parallel

在 bash 中,我正在运行 GnuPG 来解密一些文件,并且我希望将输出重定向到具有相同名称但具有不同扩展名的文件。基本上,如果我的文件被命名

file1.sc.xz.gpg
Run Code Online (Sandbox Code Playgroud)

运行 GnuPG 工具后出现的文件我想存储在另一个名为

file1.sc.xz 
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试

find . -type f | parallel "gpg {} > {}.sc.xz"
Run Code Online (Sandbox Code Playgroud)

但这会生成一个名为 file1.sc.xz.gpg.sc.xz 的文件。我怎样才能做到这一点?

稍后编辑:我想在一个单独的 bash 命令中执行此操作,而无需事先知道文件名。

Max*_*kin 5

您可以使用 bash 变量扩展来切断扩展:

$ f=file1.sc.xz.gpg
$ echo ${f%.*}
file1.sc.xz
Run Code Online (Sandbox Code Playgroud)

例如:

find . -type f | parallel bash -c 'f="{}"; g="${f%.*}"; gpg "$f" > "$g"'
Run Code Online (Sandbox Code Playgroud)

或者,使用扩展parallel

find . -type f | parallel 'gpg "{}" > "{.}"'
Run Code Online (Sandbox Code Playgroud)

  • 使用 `-print0` 和 `parallel --null` 来防止恶意文件名 (4认同)