如何通过命令行创建一个文件夹,并在其中创建一个新的文本文件?

3

我是一名记者,使用以下命令创建一个故事文件夹,并为每个新故事创建子文件夹:

/bin/mkdir -p ~/Desktop/NewStory/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}}

它的功能非常好,但我也想在“Data”子文件夹中创建一个名为“DataJournal.txt”的文本文件,但我不知道如何做到这一点。
更进一步,我想添加我的数据日志的四个标题:
---数据文件夹设置 ---数据介绍 ---数据审计/操作 ---数据查询
现在可以使用echo命令创建这样的文本文件,但我不知道如何将其融入创建文件夹/子文件夹的命令中。非常感谢您的帮助!
3个回答

4

将整个内容包装成一个shell脚本,然后执行该脚本,而不是使用mkdir命令。

#!/bin/bash

if [[ -z "${1}" ]]; then
  die "FolderName Required"
fi


/bin/mkdir -p ~/Desktop/$1/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}}

echo -n "---Data Folder Setup

---Data Introduction

---Data Audit/Manipulation

---Data Queries" > ~/Desktop/$1/Data/DataJournal.txt

为了更加通俗易懂,使用这个脚本的方法是 bash script-name.sh StoryName,其中$1会被替换成传递给脚本的第一个参数。如果你已经将脚本设置为可执行文件,也可以直接使用./script-name.sh StoryName命令。


我很想看到那个。非常感谢! - Jeff Severns Guntzel
@Mimisbrunnr,你忘记添加检查参数的代码了!如果没有参数执行,它将创建~/Desktop/{Copy,Data,Notes,PubMaterial,RefMaterial}等文件夹! - Matt
谢谢!我通过这个获得了学生徽章,非常感谢所有的老师。 - Jeff Severns Guntzel
恭喜Jeff,不要忘记接受一个答案并欢迎来到StackOverflow。 - zellio
我会完全这样做,谢谢!所有的答案都在如此快速地更新,我仍在努力跟上! - Jeff Severns Guntzel
显示剩余3条评论

2
如果您真的想在一行上执行它,可以使用&&将命令链接在一起,但最好将其放在自己的shell脚本中:
#!/bin/bash

if [ $# -eq 0 ]; then echo "No name specified."; exit; fi;
/bin/mkdir -p ~/Desktop/$1/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}}
echo -n "---Data Folder Setup

---Data Introduction

---Data Audit/Manipulation

---Data Queries" > ~/Desktop/$1/Data/DataJournal.txt

如果您把这个代码放在例如create-story.sh文件中,那么您可以使用命令./create-story.sh NewStory来调用它。别忘了使用chmod +x create-story.sh命令使其可执行。

这太棒了。能够以这种方式命名文件夹真是太好了。只有一个问题,当我打开DataJournal.txt文件时,里面有这个:---数据文件夹设置\n\n--数据介绍... - Jeff Severns Guntzel
抱歉 - 请将echo行替换为其他答案中的多行echo。我会更新我的答案 :) - Timothy Jones
如果没有任何参数执行,$1将等于“”,从而在不应该存在的地方创建大量文件夹。[就在桌面上] - Matt
更新的版本很棒。谢谢!今天早上学到了很多东西。 - Jeff Severns Guntzel
@Matt 发现得真好。我加入了你回答中的错误检查,并点了个赞。大家一起高五! - Timothy Jones
显示剩余2条评论

1

如果您将经常执行此操作,建议编写一个脚本。[或者将其作为函数放入您的.bashrc文件中]

将以下内容复制并粘贴到一个文件中:

#!/bin/bash
if [ $# -eq 0 ]; then echo "No name specified."; exit; fi;
mkdir -p ~/Desktop/"$1"/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}}
echo '---Data Folder Setup

---Data Introduction

---Data Audit/Manipulation

---Data Queries' > ~/Desktop/"$1"/Data/DataJournal.txt
exit 0

将此内容保存在您的主文件夹[~/]中的“newstory”或其他您喜欢的位置。 打开终端并键入[更新]chmod +x newstory; sudo mv newstory /usr/games//usr/games/通常在您的$PATH变量中,因此当您键入“newstory”时,它知道在哪里查找并执行它。注意[截至目前]这里的其他答案没有错误保护,因此如果您在没有参数[$1]的情况下执行脚本,它将简单地创建您的~/Desktop/目录中的所有目录!

现在您已经完成了!下次您想要添加一个新目录以及所有子目录和带有标题的DataJournal.txt时,请打开终端并键入newstory“故事名称”!如果名称中有空格,请确保用引号括起来,否则它只会捕捉第一个单词。

P.S.如果您想在.bashrc中使用函数,只需将上述代码[除了“#!/bin/bash”]包装在一个函数中,添加到~/.bashrc中:`newstory(){粘贴代码;}


你的 #! 不会起作用,除非你的 bash 冻结在你的驱动器根目录。 - zellio
好的,当我输入sudo命令时,我得到了这个返回信息:mv: 将newstory重命名为/usr/games/:权限被拒绝。 - Jeff Severns Guntzel
@Jeff,抱歉, 请尝试更新的代码。谢谢 :) - Matt
@Matt,你能再看一下另一个错误信息吗?这次我用sudo运行,得到了这个:su: illegal option -- c usage: su [-] [-flm] [login [args]] - Jeff Severns Guntzel
@Jeff...非常抱歉;我又更新了一次,请再试一次!这次一定不会失败。 - Matt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接