【问题标题】:How to create multiple files in each directories and then compress it through tar (BASH)如何在每个目录中创建多个文件,然后通过 tar (BASH) 进行压缩
【发布时间】:2017-09-30 22:11:58
【问题描述】:

我目前正在努力创建多个文件并将其存储到每个目录中。 我已经制作了 100 个这样的目录:

mkdir ./dir.{01..100}

我想要的是为每个目录创建 100 个文本文件。这样结果将显示为:

在home目录点击dir.01,文件名为:01.txt to 100.txt

另外,我想使用 tar 压缩所有 100 个目录,每个目录包含 100 个文本文件。

我正在努力:

  1. 在 100 个目录中创建 100 个文本文件
  2. 使用 tar 将所有 100 个目录压缩在一起。

我更感兴趣的是在 100 个目录中创建 100 个文本文件。此外,我更感兴趣的是如何使用 tar 将所有 100 个目录连接到特定文件 (fdtar) 中。

【问题讨论】:

标签: bash


【解决方案1】:

如果你对空文件没问题,

touch ./dir.{01..100}/{01..100}.txt

如果您需要每个文件都包含某些内容,请将其用作循环中的驱动程序:

for file in ./dir.{01..100}/{01..100}.txt; do
    printf "This is the file %s\n" "$file">"$file"
done

这可能会在某些平台上遇到ARG_MAX(“参数列表太长”),但它在 MacOS 上运行良好,并且在任何合理标准的 Linux 上都应该运行良好。

将循环分成内循环和外循环可以解决这个问题:

for dir in ./dir.{01..100}; do
    for file in {01..100}.txt; do
        printf "This is file %s/%s\n" >"$dir/$file"
    done
done

【讨论】:

    【解决方案2】:

    如果我了解您需要两件事。首先,您有 100 个目录,需要在每个目录中创建一个文件。使用bash 中的for 循环,从您创建的所有其他目录的父目录运行:

    for n in dir.*
    do
      f=`echo $n | sed s/dir\.//`
      echo "This is file $n" >"$n/$f.txt"
    done
    

    关于tar 这更容易,因为tar 将获取多个目录并将它们粘合在一起。从父目录尝试:

    tar cvf fd.tar dir.*
    

    c 选项将创建存档。 v 会告诉 tar 打印它正在做的所有事情,这样你就知道发生了什么。 f directories.tar 将使用该名称创建存档。

    当你撤消 tar 操作时,你将使用:

    tar xvf fd.tar
    

    在这种情况下,x 将提取 tar 存档的内容,并将在您调用它的目录中为您创建所有 100 个目录。

    请注意,我使用了fd.tar 而不是fdtar,因为.tar 扩展名是表示文件是tar 存档的惯用方式。

    【讨论】:

    • 如果其中一个目录包含空格或一些 shell 元字符,这将在多个位置中断。始终,always 在包含文件名的变量周围使用双引号。 stackoverflow.com/questions/10067266/…
    • 建议已接受,谢谢。尽管在没有此类情况的情况下说明了问题。
    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多