背景

背景

背景

一个目录可以包含N个子目录。每个子目录包含多个要解压的.rar 文件。

〜/ mydir / Data 1〜/ mydir / Data2 ...〜/ mydir / DataN

注意“i”和“r”以及“a”和“1”之间的空格

目标

从命令行发出单个命令来 Unzip.rar 文件并将文件保留在原始 .rar 目录中(不要创建新目录)。

我的第一个想法是递归地构建 .rar 文件的列表,直接输出:

查找主页/用户/mydi\ r/Data\ 1 | grep.rar

进入xargs并解压:

unrar e -r /home/user/mydi\ r/Data\ 1/myfile.rar

问题

能否xargs正确处理目录和文件名中的空格字符,没有\字符?

我怀疑目录和 .rar 文件名中的空格字符导致错误:

find /home/user/Desktop/ -name "*Har*.rar" | xargs  -d '\n'  unrar e -r  

因为unrar期望在空格字符之前有一个 '\':

/home/user/mydi\ r/Data\ 1/myfile.rar

返回的错误: No files to extract

如有任何诊断问题或建议,我们将不胜感激。

答案1

这就是为什么 GNUfind有一个-print0选项,GNUxargs有一个-0选项:这些选项导致find用 ASCII 字符分隔文件名NUL,并导致xargs查找NUL字符来分隔输入参数。这使您可以正确处理包含空格的文件名。

例如:

find /home/user/Desktop -name '*.rar' -print0 | xargs -0 -n1 unrar e -r

我们需要该-n1标志,xargs因为unrar e期望命令行上有一个存档。

相关内容