【问题标题】:Extracting a .tar file and creating a filelist提取 .tar 文件并创建文件列表
【发布时间】:2014-03-10 09:51:38
【问题描述】:

我这里有这个小代码

     for file in *.tar.gz;
     do tar xzvf "${file}" && rm "${file}";
     done

它提取 tar.gz 并将其删除。现在我必须创建一个文件列表文件 (.fl),其名称类似于 .tar 的子字符串。例如,我必须从 .tar.gz 的名称中删除前 5 个字母和后 5 个字母(扩展名)。对于我提取的每个 .tar.gz 。

例子:

  • 我有一个 ABC_A.tar.gz,其中包含一个 ABC_A.xml。
  • 我必须制作一个 A.fl 在那个 A.fl 我必须写 ABC_A.xml

提前致谢。

【问题讨论】:

    标签: string shell unix substring filelist


    【解决方案1】:

    在您的循环中,您可以对每个文件执行以下操作:

    # delete first five characters
    name=${file:5}
    
    # delete .tar.gz suffix
    name=${file%%.tar.gz}
    

    【讨论】:

    • 您好,脚本没有捕捉到代码 name=${file:5} 的第一部分。此外,我必须动态生成 .fl 文件(对于每个 .tar.gz 单个 .fl 文件)
    • 如果要删除前 4 个字母,请使用 ${file:4}。然后,在您的循环中,运行 tar tfz "$file" > "${name}.fl" 以输出 tar.gz 中存在的文件列表。
    • 我设法解决了,谢谢大家的回答。 for file in *.tar.gz; do tar xzvf "${file}" && rm "${file}"; tmp=${file:39} && b=${tmp%.tar.gz*} && echo "${file%.tar.gz*}.xml" >> "${b}".fl; done
    • @tljubas,您应该接受(答案旁边的复选标记)答案和/或upvote(柜台上方的向上三角形) 一个你觉得有用的。
    【解决方案2】:

    使用

    for file in *.tar.gz
    do
        # this creates the file list into a .fl file:
        tar tfz "${file}" > "${file:5:-5}.fl"
        # this extracts and afterwards removes the tar archive:
        tar xzvf "${file}" && rm "${file}"
    done
    

    您也可以将两者合二为一:

    for file in *.tar.gz
    do
        tar xzvf "${file}" > "${file:5:-5}.fl" && rm "${file}"
    done
    

    【讨论】:

    • 感谢您的尝试,但我已经尝试过了,但它不起作用。也许我实施错了?对于 *.tar.gz 中的文件;做 tar xzvf "${file}" && rm "${file}" > "${file:5:-5}.fl"
    • 这不是我写的:-)
    • 我从问题中通过您的for 循环扩展了我的解决方案。您在评论中写的内容只会将 rm 的输出重定向到每个 tar 的新文件中(因此会创建空文件)。请注意,我使用 t 而不是 x 作为 tar 命令来列出内容而不是提取 tar。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多