【问题标题】:Create file along with nested directory in single command line在单个命令行中创建文件以及嵌套目录
【发布时间】:2018-06-08 16:38:18
【问题描述】:

我想在一个尚不存在的目录a/b/c 中创建一个文件abc.php。我需要使用像这样mkfile a/b/c/abc.php 这样的单个命令来完成它我检查了this 解决方案,它建议像这样mkfile a/b/c abc.php 的解决方案。

除此之外,我还希望在编辑器中打开文件,这与 nano 命令有关。

通常在学习教程时,我们必须创建文件并复制和粘贴其文件目录而不进行编辑,这会使生活变得更简单。

【问题讨论】:

  • 请检查我更新的问题。
  • 为什么不用一个简短的脚本,将路径和文件名作为参数,然后[ "$1" != "${1##*/}" ] && mkdir -p "${1%/}"; touch "$1"; exec nano "$1"

标签: linux file nested directory mkdir


【解决方案1】:

如果我理解正确并且您只是希望能够发出command foo/bar/baz/myfile.txt(或类似的东西)并创建目录foo/bar/baz,并在nano中创建并打开一个新文件nano命令,那么你只需要一个简短的脚本,例如

使其可执行,例如mv nanoopen.sh scriptname; chmod 0755 scriptname,然后只需致电 ./scriptname foo/bar/baz/file.txt。如果你把它放在你的路径中,你也可以跳过 ./

将其放入路径的简单方法是在/usr/local/bin 中创建指向它的符号链接,该符号链接通常位于默认路径中。 所以你可以(有时需要超级确认)ln -s /path/to/nanoopen.sh /usr/local/bin/scriptnameEcho $PATH 确认 /usr/local/bin 在你的路径中,然后像任何程序一样使用它,脚本名参数。 或者在某些发行版中,您可以简单地将其添加到具有 root 访问权限的 /bin 文件夹。

#!/bin/bash

[ -z "$1" ] && {  ## validate one argument given
    printf "error: insufficient input\nusage: %s filename\n" "${0##*/}"
    exit 1    
}

[ "$1" != "${1##*/}" ] && mkdir -p "${1%/*}"  ## if it has directories, create
touch "$1"                                    ## create the file

exec nano "$1"     ## open in nano

使用/输出示例

$ bash nanoopen.sh foo/bar/baz/main.c

$ tree foo/
foo/
└── bar
    └── baz
        └── main.c

$ cat foo/bar/baz/main.c
My new source!

【讨论】:

  • 我试过了,这正是我想要的。我们不能在命令前后都使用 bash 和 .sh 吗?
  • 当然,只要调用任何你喜欢的脚本并使其可执行(例如mv nanoopen.sh scriptname; chmod 0755 scriptname)然后调用./scriptname foo/bar/baz/file.txt。 (如果你把它放在你的path,你也可以跳过./)把它放在你的路径中的简单方法是在/usr/local/bin中创建一个符号链接(通常在默认路径中)。所以你可以(有时需要supersureln -s /path/to/nanoopen.sh /usr/local/bin/scriptname。 (echo $PATH 确认 /usr/local/bin 在你的路径中),然后像任何程序一样使用它,scriptname arguments
  • 我已将其添加到我的 /bin 文件夹中
  • 是的,这也适用于像 SuSE 这样在默认路径中提供 ~/bin 的发行版。 (请注意,并非所有发行版都这样做)祝你的脚本好运。
  • 谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 2019-03-06
  • 2020-08-08
  • 2021-04-01
  • 2012-06-24
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多