【问题标题】:Create mutiple files in multiple directories [closed]在多个目录中创建多个文件[关闭]
【发布时间】:2018-12-04 07:22:09
【问题描述】:

我有如下文件夹树:

00 -- 0
   -- 1
   ...
   -- 9
 ...
99 -- 0 
   -- 1
   ...
   -- 9

如何在每个子文件夹中创建一个文件的最简单方法是: /00/0/00_0.txt 并将某种数据保存到每个文件中?

我尝试了 touchloop 但没有成功。 任何想法如何使它变得非常简单?

【问题讨论】:

  • 向我们展示您尝试过的代码。
  • 实际文件夹也是数字还是您为我们做了一个简单的例子(谢谢!)?一种粗鲁的方法是使用 00-99 和 0-9 运行并尝试触摸文件,而忽略错误。或者用for dir in */*/; do ..之类的东西显示为你的循环。

标签: linux bash console


【解决方案1】:

使用 glob 列出所有目录。用sed 修改列出的路径,使37/4 变为37/4/37_4.txt。使用touch 为所有修改的路径创建空文件。

touch $(printf %s\\n */*/ | sed -E 's|(.*)/(.*)/|&\1_\2.txt|')

即使12/3 只是一个占位符并且您的实际路径类似于abcdef/123,这仍然有效。但是,当您的路径包含任何特殊符号(如空格、*?)时,它将失败。

要处理任意路径名,请使用以下命令。它甚至支持路径名中的换行符。

mapfile -td '' a < <(printf %s\\0 */*/ | sed -Ez 's|(.*)/(.*)/|&\1_\2.txt|')
touch "${a[@]}"

【讨论】:

  • 非常感谢。第一个命令有效。该领域的另一个问题 - 我如何按顺序将文本写入所有这些文件:所有文件中的 key00=value0。键是文件夹,值是子文件夹。
  • @parsley93 :您是否错误地点击了两个答案的 downvote (v) 而不是 up(^)?
  • @KaushikNayak 恐怕其他人故意对我们投反对票。 Parsley93 没有足够的声望来投票。也许投反对票的人认为我们不应该回答低努力的问题来鼓励人们提出更多低努力的问题——只是一个猜测。我很高兴听到确切的原因。随机投票可能真的很令人沮丧。让我投赞成票来弥补匿名投反对票。
  • 正如@KaushikNayak 所说,我不能下注——我只给出了正确解决方案的勾号
  • 好的。 @ parsley93 请原谅我。正确的 Socowi,无论谁投了反对票,都应该给出一个正当的理由。顺便说一句,我也有一份:-)
【解决方案2】:

您可以使用find,然后使用-exec 运行命令

find . -type d -maxdepth 2 -mindepth 2 -exec bash -c 'f={};
cmd=$(echo "${f}/${f%/*}_${f##*/}.txt"); touch $cmd' \;

bash 替换 ${f%/*}_${f##*/} 将最后一个 / 替换为 _

【讨论】:

  • 您的解决方案也有效:)
猜你喜欢
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2018-10-24
  • 1970-01-01
相关资源
最近更新 更多