Bash 如何从命令行创建包含新文本文件的文件夹?
我是一名记者,使用以下命令为我开始的每个新故事创建一个包含子文件夹的故事文件夹:Bash 如何从命令行创建包含新文本文件的文件夹?,bash,shell,command-line,Bash,Shell,Command Line,我是一名记者,使用以下命令为我开始的每个新故事创建一个包含子文件夹的故事文件夹: /bin/mkdir -p ~/Desktop/NewStory/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}} 它就像一个符咒,但我还想在“Data”子文件夹中创建一个名为“DataJournal.txt”的文本文件,我不知道怎么做 更进一步,我想添加我的数据日志的四个标题: ---数据文件夹设置 ---数据介绍 ---数
/bin/mkdir -p ~/Desktop/NewStory/{Copy,Data,Notes,PubMaterial,RefMaterial,Media/{Audio,Images,Video}}
它就像一个符咒,但我还想在“Data”子文件夹中创建一个名为“DataJournal.txt”的文本文件,我不知道怎么做
更进一步,我想添加我的数据日志的四个标题:
---数据文件夹设置
---数据介绍
---数据审计/处理
---数据查询
我现在可以使用echo命令创建这样的文本文件,但我不知道如何将其应用到创建文件夹/子文件夹的命令中。如果有任何帮助,我将不胜感激 只需将整个内容包装到一个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
,如果你碰巧遇到chmod+x
,那么它就是可执行的)。如果你真的想在一行中执行,你可以将命令与和&
链接在一起,但是你最好把它放在自己的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
如果将其放入say
create story.sh
,则可以使用/create-story.sh NewStory
调用它。别忘了使用chmod+xcreate story.sh将其设置为可执行文件。如果您经常这样做,我会创建一个脚本。[或者您也可以将其设置为函数并将其放入.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”或主文件夹中的任意内容[~/]
打开一个终端并键入[Update]chmod+x newstory;sudo mv newstory/usr/games/
/usr/games/通常位于$PATH变量中,因此当您键入“newstory”时,它知道在何处查找并执行它注意[截至目前]此处的其他答案没有错误保护,因此,如果您在没有参数[$1]的情况下执行脚本,它只会生成~/Desktop/目录中的所有目录
现在你们都做完了!下次您要添加一个包含所有子目录的新目录以及带有标题的DataJournal.txt时,请打开终端并键入newstory“故事名称”
!如果名称中有空格,请务必引用它,否则它只会捕获第一个单词
另外,如果您想在.bashrc中使用函数,只需将上述代码包装在函数中[除了添加到~/.bashrc:`newstory(){将代码粘贴到此处}的'#!/bin/bash'之外]更好的是,您可以使其更一般化,并将NewStory的值作为参数传入。非常正确,我发现在正确性和速度之间存在权衡。如果jeff认为有必要,我可以将其更新为参数。我很乐意看到这一点。非常感谢!我下面的答案将故事名称作为参数—但这个答案是正确的处理换行符的更好方法:)@mimisbrunr,您忘记添加代码来检查参数!如果在没有参数的情况下执行,它将创建~/Desktop/{Copy,Data,Notes,PubMaterial,RefMaterial}等等!你的#!除非你的bash在你的驱动器根上冷却,否则不会工作。好的,当我输入sudo命令时,我得到了这个消息:mv:rename newstory to/usr/games/:Permissiondenied@Jeff,很抱歉,请尝试更新的代码。谢谢:)马特-您有额外的“
在$1
周围的字符,这也会导致problems@Matt,您能再看一条错误消息吗?这次运行sudo,得到了这个:su:invalize option--c用法:su[-][-flm][login[args]]这太棒了。能够以这种方式命名文件夹真是太棒了。只有一个问题,当我打开DataJournal.txt文件时,其中有一个问题:---数据文件夹设置\n\n--数据介绍…抱歉-在其他答案中用多行回显替换回显行。我将更新我的答案:)将-e参数添加到回显[启用转义字符],它会起作用。更新的版本应该会起作用。如果你想,你甚至可以进一步打开DataJournal文件,在脚本末尾添加类似于gedit~/Desktop/$1/Data/DataJournal.txt的内容。如果在没有任何参数的情况下执行,$1将等于“”,从而创建成吨的文件夹,而这些文件夹不应位于..[桌面上]