递归提取 rar 文件

递归提取 rar 文件

有时我会从互联网上下载种子,没有非法内容,只是种子。

完成的 torrent 是一个目录,包含:

  1. file.rar

还有file.rar“块”

  1. file.r00
  2. file.r01
  3. file.r02
  4. file.r03
  5. file.r04
  6. file.r05
  7. file.r06
  8. file.r07
  9. file.r08
  10. file.r09
  11. file.r10
  12. file.r11
  13. file.r12
  14. file.r13
  15. file.r14
  16. file.r15
  17. file.r16
  18. file.r17
  19. file.r18
  20. file.r19
  21. file.r20
  22. file.r21
  23. file.r22
  24. file.r23
  25. file.r24
  26. file.r25
  27. file.r26
  28. file.r27
  29. file.r28
  30. file.r29
  31. file.r30
  32. file.r31
  33. file.r32
  34. file.r33
  35. file.r34
  36. file.r35
  37. file.r36
  38. file.r37
  39. file.r38
  40. file.r39
  41. file.r40
  42. file.r41
  43. file.r42
  44. file.r43
  45. file.r44
  46. file.r45
  47. file.r46
  48. file.r47
  49. file.r48
  50. file.r49 .... 等等

当我解压 rar 时file.rar,它会提取file.iso。完成此过程后,我不再需要file.rarfile.r[00..49]。有时会有数百个 rar 块,它是动态的。

一个例子:

在我的主目录中~,我有一个Downloads文件夹,其中存储了我下载的种子。

我使用 cd 进入该Downloads文件夹。 $ cd Downloads/

文件夹中Downloads有多个下载的种子,均具有动态范围的“块”。

Downloads ls

Ubuntu/
Pop_Os/
Mint/
Kodachi/

Downloads文件夹中,我想运行一个命令来提取子文件夹中的所有 rar 文件,在本例中为:Ubuntu、Pop_Os、Mint 和 Kodachi。并在同一过程中删除*.rar。提取子文件夹“ubuntu”中的 ,提取子文件夹“Pop_Os”中的*.r[00..**],依此类推。ubuntu.isopop_os.iso

下个月的下载文件夹可能包含:

Parrot_OS/
Manjaro/
Arch/

我不想在执行的命令中更改任何内容~/Downloads

希望这能解答我在评论中收到的一些疑问。

答案1

使用while循环可能比以下方法更简单-exec

find . -type f -name '*.rar' -print0 | 
    while IFS= read -r -d '' file; do
        dir=$(dirname "$file")
        rar=$(basename "$file")
        cd "$dir"
        unrar e "$rar" && rm "$rar"
        cd -
    done


        

答案2

解压:

非免费 UNRAR 兼容概要 unrar-free [elvx] [-ep] [-o+] [-o-] [-ppassword] [-u] [--] 档案 [文件 ...] [目标]

   This syntax should only be used in front-end programs which  are  using
   non-free  unrar as a back-end. It is recommended to use this program by
   GNU command line syntax.

   e         Extract files from archive without full path.

   l         List files in archive.

   v         Verbose list files in archive.

X :使用完整路径从存档中提取文件

答案3

将提取.rar到其原始文件夹,而不是pwd

cd FOLDER_WITH_RAR
find . -type f -name '*.rar' -print0 |
    while IFS= read -r -d '' file; do
      dir=$(dirname "$file")
      rar=$(basename "$file")
      cd "$dir"
      echo "file=$file, dir=$dir, rar=$rar"
      unrar x "$rar"
      # rm -f "$rar"
      cd -
    done

相关内容