我知道该touch
命令会创建一个文件:
touch test1.txt
但是如何创建文件及其完整路径?
例如,我的桌面什么都不包含:
~/Desktop/$ ls
~/Desktop/$
我想在中创建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
而不是手动创建完整路径,然后创建文件?
我知道该touch
命令会创建一个文件:
touch test1.txt
但是如何创建文件及其完整路径?
例如,我的桌面什么都不包含:
~/Desktop/$ ls
~/Desktop/$
我想在中创建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
而不是手动创建完整路径,然后创建文件?
Answers:
touch
无法创建目录,您需mkdir
要这样做。
但是,mkdir
具有有用的-p
/ --parents
选项,它可以创建完整的目录结构。
来自man mkdir
:
-p, --parents
no error if existing, make parent directories as needed
因此,您在特定情况下需要的命令是:
mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt
如果您认为自己会更经常需要此方法,并且不想每次都键入两次路径,则还可以为其创建一个Bash函数或一个脚本。
Bash功能(将这行附加~/.bashrc
到您的用户上永久可用,否则在退出终端时它将再次消失):
touch2() { mkdir -p "$(dirname "$1")" && touch "$1" ; }
它可以像这样简单地使用:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Bash脚本(将其存储在/usr/local/bin/touch2
sudo中,以使其对所有用户可用,否则~/bin/touch2
仅对您的用户可用):
#!/bin/bash
mkdir -p "$(dirname "$1")" &&
touch "$1"
不要忘记使用使脚本可执行chmod +x /PATH/TO/touch2
。
之后,您还可以像这样运行它:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
touch-p
(无空格!)代替touch2
,但是我不会尝试替换原始命令。
可以使用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$
如果我们有多个文件,我们可能要考虑使用项目列表(请注意,请记住用空格引用项目),并对其进行迭代:
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
或者使用数组:
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
install -m 644 -D /dev/null <filepath>
为此,您可以创建自己的函数,例如以下示例:
$ echo 'mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" ; }' >> ~/.bashrc
$ source ~/.bashrc
$ mkfile ./fldr1/fldr2/file.txt
首先,我们使用echo命令在〜/ .bashrc文件的末尾插入一个函数。函数中的-p标志允许创建嵌套文件夹,例如本例中的fldr2。最后,我们使用源命令更新文件,并最终执行最近创建的mkfile命令
touch
命令并添加开关-p
吗?