创建文件及其父目录

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 函数或脚本。

  • @HeshmatKhah 这应该是可能的,但不建议使用您自己的脚本或函数隐藏系统可执行文件。如果您更喜欢“p”,您可以使用名称`touch-p`(没有空格!)而不是`touch2`,但我不会尝试替换原始命令。 (3认同)
  • 请注意,您也可以使用后缀删除代替 `dirname` ,即您可以执行 `mkdir -p "${1%/}" && touch "$1"` ,与 https://askubuntu.com/a/ 相同928544/295286 (2认同)

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)

  • 通过这种方法,新文件默认获得可执行权限。要赋予它与 touch 相同的权限,可以使用 install -m 644 -D /dev/null <filepath>` (7认同)

小智 5

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

  • 恕我直言,对此答案的任何解释都会很好。 (3认同)
  • 此链接解释了这种魔法是如何发生的 https://unix.stackexchange.com/a/280557/422527 (2认同)