如何用一个命令创建一行目录?

如何用一个命令创建一行目录?

mkdir如果我希望这个位置存在(当到目前为止~/test/panda/fat只有它的一部分存在)的话,我必须执行以下操作:~

mkdir ~/test
mkdir ~/test/panda
mkdir ~/test/panda/fat

mkdir ~/test/panda/fat但是,如果我可以运行类似的命令而不是仅仅得到这个错误,那将会更有用:

mkdir: cannot create directory ‘/home/$USER/test/panda/fat’: No such file or directory

实际上让它test在 中创建目录,然后在 中创建~目录,最后在该子目录中创建目录。我遗漏了什么吗?有没有办法做到这一点,因为它会非常有用?事实上,在某些情况下,对我来说更有用的是,我还能够在最后自动创建一个文件,这样它就可以创建所有这些目录,然后在 中创建文件,并且所有这些都在同一个命令中(显然不需要最后有一个文件)。panda~/testfatbamboo.txtfat

如果还没有可以执行此操作的命令(如果没有我会感到惊讶),那么我该如何编写脚本来实现这一点?

我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10。

答案1

使用-p以下选项mkdir

mkdir -p ~/test/panda/fat

man mkdir

-p, --parents
              no error if existing, make parent directories as needed

例子:

% mkdir /tmp/foo/bar
mkdir: cannot create directory ‘/tmp/foo/bar’: No such file or directory

% mkdir -p /tmp/foo/bar    ## Done

现在关于在自动创建不存在的目录之后创建文件,简单地说 - 您不能一次性完成此操作。

最多可以在生成目录的命令之后添加生成文件的命令:

mkdir -p ~/test/panda/fat && touch ~/test/panda/fat/bamboo.txt

您可以使用历史扩展touch命令来使其更短,或者为方便起见创建一个 shell 函数。


下面是一个可以完成这个工作的 shell 函数:

create_file_dir() {
    [ "$#" -ne 2 ] && echo 'Insufficient Arguments' ||

        case "$1" in -d)    mkdir -p "$2" && echo "Directory '"$2"' Created" ;;

                     -f)    mkdir -p "${2%/*}" && touch "$2" \
                              && echo "File '"$2"' Created" ;;

                      *)    echo "Invalid Argument"
        esac
}

把代码片段放入你的~/.bashrc,然后source ~/.bashrc按如下方式使用:

create_file_dir -d /directories/to/create  ##For only directories
create_file_dir -f /path/to/file  ## For file with intermediate dirs

警告:如果文件已经存在,touch将会改变时间戳。

例子:

$ create_file_dir -d /tmp/spam/egg/
Directory '/tmp/spam/egg/' Created

$ create_file_dir -f /tmp/spam/egg/foobar
File '/tmp/foo/bar/foobar' Created

$ create_file_dir /spam/egg
Insufficient Arguments

$ create_file_dir -m /spam/egg
Invalid Argument

答案2

尝试-p根据需要使用参数创建父目录。

   -p, --parents
          no error if existing, make parent directories as needed

答案3

如果您不想使用该-p选项,您可以输入:

mkdir  ~/test  ~/test/panda  ~/test/panda/fat

相关内容