M.A*_*hah 33 command-line files
我知道该touch
命令会创建一个文件:
touch test1.txt
Run Code Online (Sandbox Code Playgroud)
但是我如何创建一个文件及其完整路径?
例如我的桌面什么都不包含:
~/Desktop/$ ls
~/Desktop/$
Run Code Online (Sandbox Code Playgroud)
我想在创建的1.txt ~/Desktop/a/b/c/d/e/f/g/h/1.txt
。我可以用一个简单的命令来做到这一点,比如:
$ touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Run Code Online (Sandbox Code Playgroud)
而不是手动创建完整路径然后创建文件?
Byt*_*der 43
touch
无法创建目录,您需mkdir
要这样做。
但是,mkdir
具有创建完整目录结构的有用-p
/--parents
选项。
来自man mkdir
:
-p, --parents
no error if existing, make parent directories as needed
Run Code Online (Sandbox Code Playgroud)
因此,您在特定情况下需要的命令是:
mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Run Code Online (Sandbox Code Playgroud)
如果你认为你会更频繁地需要它并且不想每次都输入两次路径,你也可以为它制作一个 Bash 函数或脚本。
Bash 函数(将此行附加~/.bashrc
到您的用户可以永久使用它,否则当您退出终端时它会再次消失):
touch2() { mkdir -p "$(dirname "$1")" && touch "$1" ; }
Run Code Online (Sandbox Code Playgroud)
它可以像这样简单地使用:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Run Code Online (Sandbox Code Playgroud)Bash 脚本(/usr/local/bin/touch2
使用 sudo 将其存储以使其可供所有用户使用,否则~/bin/touch2
仅适用于您的用户):
#!/bin/bash
mkdir -p "$(dirname "$1")" &&
touch "$1"
Run Code Online (Sandbox Code Playgroud)
不要忘记使用chmod +x /PATH/TO/touch2
.
之后,您还可以像这样运行它:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Run Code Online (Sandbox Code Playgroud)Ser*_*nyy 12
可以使用install
带-D
标志的命令。
bash-4.3$ install -D /dev/null mydir/one/two
bash-4.3$ tree mydir
mydir
??? one
??? two
1 directory, 1 file
bash-4.3$
Run Code Online (Sandbox Code Playgroud)
如果我们有多个文件,我们可能需要考虑使用项目列表(注意,记得用空格引用项目),并迭代它们:
bash-4.3$ for i in mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} ; do
> install -D /dev/null "$i"
> done
bash-4.3$ tree mydir
mydir
??? one
? ??? two
??? subdir 2
? ??? file3
? ??? file4
??? subdir one
??? file1
??? file2
Run Code Online (Sandbox Code Playgroud)
或者使用数组:
bash-4.3$ arr=( mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} )
bash-4.3$ for i in "${arr[@]}"; do install -D /dev/null "$i"; done
bash-4.3$ tree mydir
mydir
??? one
? ??? two
??? subdir 2
? ??? file3
? ??? file4
??? subdir one
??? file1
??? file2
Run Code Online (Sandbox Code Playgroud)
小智 5
mkdir -p parent/child && touch $_/file.txt
Run Code Online (Sandbox Code Playgroud)