mkdir -p 用于文件

Ste*_*nny 36 shell directory mkdir

mkdir -p将创建一个目录;它还将根据需要创建父目录。

文件是否存在类似的命令,它将根据需要创建文件和父目录?

der*_*ert 38

如果给定源文件,安装将执行此操作/dev/null。该-D参数表示创建的所有父目录:

anthony@Zia:~$ install -D /dev/null /tmp/a/b/c
anthony@Zia:~$ ls -l /tmp/a/b/c 
-rwxr-xr-x 1 anthony anthony 0 Jan 30 10:31 /tmp/a/b/c
Run Code Online (Sandbox Code Playgroud)

不确定这是否是一个错误——手册页中没有提到它对设备文件的行为。你也可以给它一个空白文件(mktemp例如新创建的)作为源文件。


小智 8

不,据我所知没有。但是你总是可以互相使用mkdir -ptouch

f="/a/b/c.txt"
mkdir -p -- "${f%/*}" && touch -- "$f"
Run Code Online (Sandbox Code Playgroud)


小智 5

我经常遇到这种情况,所以我只是在我的.bashrc文件中写了一个函数。看起来像这样

function create() {
    arg=$1
    num_of_dirs=$(grep -o "/" <<< $arg | wc -l)
    make_dirs=$(echo $arg | cut -d / -f1-$num_of_dirs)
    mkdir -p $make_dirs && touch $arg
}
Run Code Online (Sandbox Code Playgroud)

所以,当我想在一个不存在的目录的路径中创建一个文件时,我会说

create what/is/it  # will create dirs 'what' and 'is', with file 'it' inside 'is'
Run Code Online (Sandbox Code Playgroud)


fra*_*cis 5

mkdir -p parent/child && touch "$_/file.txt"
Run Code Online (Sandbox Code Playgroud)

$_是一个 shell 参数,它扩展为上一个命令的最后一个参数。示例mkdir test && cd "$_"将创建并cd进入目录test


小智 5

将以下内容添加到您的~/.bashrc

function mktouch() {
        mkdir -p -- "$(dirname -- "$1")" && touch -- "$1"
} 
Run Code Online (Sandbox Code Playgroud)

然后重新加载bash然后像使用它一样mktouch your/path/file.txt