2010-08-29 68 views
1

以下是我想要做的:Bash脚本使用rar提取拆分档案文件

我有一千个拆分rar档案文件夹名称归档。 文件的名称0001.part1.rar 0002.part2.rar 0003.part3.rar等

  1. 基于上述例如文件的前缀阅读0001.part1.rar
  2. 创建一个目录0001
  3. 移动上面创建的目录中具有相同前缀的所有文件。
  4. 提取该目录
  5. 中的文件删除这个目录中
  6. 所有RAR文件重命名基于从文本文件名列表上提取的文件。
  7. 用不同参数重命名文件。
  8. 将重命名的文件(从步骤6)移动到一个名为Done的新目录。
  9. 继续文件0002.part1.rar然后执行步骤2-8等。

其他如何将它与cron结合? 这应该是只运行一次......

提取第一组的RAR的文件后变更为:

file.001 
file.002 
file.003 

等,这是我需要提取过。在第6步

澄清:

提取第二组RAR的(file.001,file.002等) 后,我想根据从文本文件名列表上重命名。

例如文件列表从文本文件:

0001 - GB Funds.DAT 
0002 - US Bonds.DAT 
0003 - SG Securities.DAT 
0004 - LU Credits.DAT 

澄清步骤7:

After renaming the file I want to move it on a new folder called "Done" 

澄清步骤9:

Go back to the main folder with all the other archives 
and continue extracting the next set of archives and 
do the same steps from 1 to 8. 
+0

告诉我们你试过了什么。 – ghostdog74 2010-08-30 00:18:19

回答

0

你可以写一个shell脚本,包括像这样:

# foo.sh 
set -e 
set -u 

for i in `find -max-depth 1 -type f -name '*.rar' | sed 's/\.part*\.rar$//' | sort -u`; do 
    mkdir $i 
    mv $i.part*rar $i 
    cd $i 
    unrar x $i.part1.rar 
    DST=`grep $i ../rename.txt | sed 's/^[0-9]\+ - //'` 
    mv $i "$DST" 
    # and so on, rar it together again, move it done directory etc. 
    cd .. 
done 

运行它,然后通过:

bash foo.sh 

要弄清6./8./9。

我不知道你为什么要通过cron运行它,因为你只想运行它一次。 at专为运行一次性作业而设计,或在屏幕会话中运行。

我建议你在开始整个工作之前,用集合中的1-3个文件和最终的脚本进行一些测试。

+1

您需要'cd'回到父目录或使用'pushd' /'popd'(或一个子shell)。 – 2010-08-29 21:46:06

+0

hi maxschlepzig我回复了你的问题。 网站不允许长时间回复,所以我更新了上面的主要问题。 – farneville 2010-08-30 05:39:39

+0

@丹尼斯威廉姆森:由于脚本只是一个脚手架,CD ..和其他东西被遗漏了。 @farneville:我更新了我的答案,以显示如何重命名提取的文件。 – maxschlepzig 2010-08-30 09:25:40