我试图一次提取多个 rar 文件,但没有成功。我按以下顺序尝试:
>ls *.rar|xargs unrar x
>ls *.rar|xargs unrar e
>unrar e -r *.rar
>for f in *.rar;do unrar e “$f”;done
没人能用。Rar 每次都回答说没有文件可以提取。
>Extracting from damned_file.rar
No files to extract
如果我尝试逐个提取文件,那么一切正常
>unrar e damned_file.rar
extracting damned_file.rar
extracting dmaned_file.txt OK
All OK
>
我的 rar 版本是
UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
我做错了什么?
PS:命令
find . -name "*.rar" -exec unrar e {} \;
运行正常,但问题依然存在。为什么前面的命令失败了?
答案1
这是我的常用 for 循环:
for file in *.rar; do unrar e "$file"; done
答案2
xargs
将参数放在提供给它的命令后面,直到达到当前 shell 的最大命令长度,因此命令将是:
xargs unrar e damned_file.rar another_damned_file.rar yadf.rar
但是,unrar
仅接受单个 rar 文件作为参数。您指定的 find 命令将unrar
针对其找到的每个文件运行,因此命令为unrar e damned_file.rar
, unrar e another_damned_file.rar
。
答案3
诀窍是使用xargs
选项-n 1
ls *.rar | xargs -n 1 unrar x
-n 1
1
每个命令行最多使用一个参数(参见xargs 手册页)
但请注意,解析的输出ls
很容易导致错误。for
循环始终是更安全的选择。
您可以在为什么不应该解析 ls(1) 的输出。
答案4
在 CentOS 8 上,需要使用乌纳尔,不是解压
find . -name "*.rar" -exec unar e {} \;