【问题标题】:How to create files with folder names recursively using script?如何使用脚本递归地创建具有文件夹名称的文件?
【发布时间】:2024-05-02 21:35:02
【问题描述】:

我有一个可以包含 x 个子文件夹的文件夹结构,如下所示:

  • 文件夹 1
    • 子文件夹 1
    • 子文件夹 2
      • 子子文件夹3
  • 文件夹 2

我想在其父文件夹中创建一个包含子文件夹名称(附加 .file)的空文件,如下所示:

  • 文件夹 1
    • 子文件夹1.file(新创建的与姊妹文件夹同名的文件)
    • 子文件夹 1
    • 子文件夹2.file(新创建的与姐妹文件夹同名的文件)
    • 子文件夹 2
      • 子子文件夹3.file(新创建的与姐妹文件夹同名的文件)
      • 子子文件夹3
  • 文件夹 2

某些文件夹的名称中可能包含空格,因此我尝试了以下方法,但即使回显 $(dirname $dir)/$dir 似乎会产生预期结果,它也无法正常工作:

#!/bin/bash

find . -mindepth 1 -type d | while read dir
do
    touch $(dirname $dir)/$dir.file
done

实现这一目标的最佳方法是什么? 提前非常感谢您!

帖子已更新以尝试更清晰

【问题讨论】:

  • 我不清楚:你想要一个文件和一个同名的文件夹在同一个父文件夹中吗?
  • 同一个目录下是否可以有两个同名文件?
  • 尝试使用 touch $(dirname "$dir")/$(basename "$dir").file 这应该创建一个与目录同名但扩展名为 .file 的文件
  • 在文件系统上,我知道你不能在同一个目录中拥有一个目录和一个同名的文件。每个目录中的所有东西都需要唯一的名称。
  • 对造成的混乱表示歉意。实际上,它们不能具有相同的名称,它们可以将 .file 附加到末尾,然后我将重命名它们。我正在尝试创建与任何给定目录中的文件夹(附加 .file)同名的空文件。这些文件应与文件夹在同一级别创建。

标签: linux bash shell find


【解决方案1】:

我已经尝试过使用 awk,如果它对你有用,请检查它。 我给 .file 文件名

 realpath Fol*/* | awk '{print "touch "$1".file"}' | sh

【讨论】:

    【解决方案2】:

    也许你可以试试:

    find . -type d | while IFS= read -r d
    do 
        ( cd "$d" && cd .. && touch "$(basename "$d").file" ) 
    done
    

    【讨论】: