使用 Linux 解压目录中的所有 rar 文件

使用 Linux 解压目录中的所有 rar 文件

我试图一次提取多个 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 11每个命令行最多使用一个参数(参见xargs 手册页

但请注意,解析的输出ls很容易导致错误。for循环始终是更安全的选择。

您可以在为什么不应该解析 ls(1) 的输出

答案4

在 CentOS 8 上,需要使用乌纳尔,不是解压

find . -name "*.rar" -exec unar e {} \;

相关内容