各位,需要帮忙解压一大批 rar 文件。不想一个一个地解压。我在“dir”的子目录中有几个目录,每个目录中都有许多 .rar 文件。
dir
subdir_a
filename with spaces 01.rar
filename with spaces 02.rar
filename with spaces NN.rar
subdir_b
filename with spaces 01.rar
filename with spaces 02.rar
filename with spaces NN.rar
subdir_c
filename with spaces 01.rar
filename with spaces 02.rar
filename with spaces NN.rar
我想将 rar 文件解压到与当前标有 .rar 文件名的目录中相同的位置。因此,解压后subdir_a
会显示如下内容:
dir
subdir_a
filename with spaces 01
file 1.ext
file N.ext
filename with spaces 01.rar
filename with spaces 02.rar
filename with spaces 02
file 1.ext
file N.ext
filename with spaces NN.rar
filename with spaces NN
file 1.ext
file N.ext
我dir
尝试使用% find . -name '*.rar' -exec sh -c 'echo unrar e \"$1\" \"${1%.*}\" ' _ {} \;
进行echo
测试。它打印出我期望的结果:
unrar e "./subdir_a/filename with spaces 01.rar" ".subdir_a/filename with spaces 01/"
等等。但是,当我删除“echo”时,我得到了ERROR: Unknown option:
知道原因吗?或者是否有更好的方法可以解决?
不要将单引号参数内的双引号转义为
sh -c
- 这会导致sh
将它们按字面意思解释而不是作为 shell 特殊字符,这样filename with spaces 01.rar
它们实际上会导致它被拆分,以便unrar
接收参数e
,"filename
,with
,spaces
和01.rar"
。为了显示:
而你想要
steeldriver 对您所面临的具体问题有正确的答案;但是请注意,在这种情况下,您可以
find
根本不使用,而只使用通配符;在 Bash 中,使用通配符模式匹配嵌套深度超过当前工作目录的任何内容都需要启用该globstar
选项,因此将是:但是,从您的提示来看,您似乎正在使用 Zsh,它
globstar
默认启用了所提供的功能,因此在这种情况下您只需运行: