所以,如果我在我的主目录下,我想把foo.c移动到~/bar/baz/foo.c,但是这些目录不存在,有没有什么方法可以自动创建这些目录,这样你只需要输入
mv foo.c ~/bar/baz/
一切都会解决的吗?似乎可以将mv别名为一个简单的bash脚本,该脚本将检查这些目录是否存在,如果不存在,将调用mkdir,然后调用mv,但我想检查一下,看看是否有人有更好的主意。
所以,如果我在我的主目录下,我想把foo.c移动到~/bar/baz/foo.c,但是这些目录不存在,有没有什么方法可以自动创建这些目录,这样你只需要输入
mv foo.c ~/bar/baz/
一切都会解决的吗?似乎可以将mv别名为一个简单的bash脚本,该脚本将检查这些目录是否存在,如果不存在,将调用mkdir,然后调用mv,但我想检查一下,看看是否有人有更好的主意。
当前回答
代码:
if [[ -e $1 && ! -e $2 ]]; then
mkdir --parents --verbose -- "$(dirname -- "$2")"
fi
mv --verbose -- "$1" "$2"
例子:
参数:"d1" "d2/sub"
mkdir: created directory 'd2'
renamed 'd1' -> 'd2/sub'
其他回答
代码:
if [[ -e $1 && ! -e $2 ]]; then
mkdir --parents --verbose -- "$(dirname -- "$2")"
fi
mv --verbose -- "$1" "$2"
例子:
参数:"d1" "d2/sub"
mkdir: created directory 'd2'
renamed 'd1' -> 'd2/sub'
利用“将最后一个参数传递给shell脚本”中的技巧,我们可以创建一个简单的shell函数,无论你想移动多少个文件都能正常工作:
# Bash only
mvdir() { mkdir -p "${@: -1}" && mv "$@"; }
# Other shells may need to search for the last argument
mvdir() { for last; do true; done; mkdir -p "$last" && mv "$@"; }
使用如下命令:
mvdir foo.c foo.h ~/some/new/folder/
最简单的方法是:
mkdir [directory name] && mv [filename] $_
让我们假设我下载了位于我的下载目录(~/download)中的pdf文件,我想将它们全部移动到一个不存在的目录(比如my_PDF)。
我将输入以下命令(确保我当前的工作目录是~/download):
mkdir my_PDF && mv *.pdf $_
如果你想创建子目录,你可以在mkdir中添加-p选项,就像这样(假设我想创建一个名为python的子目录):
mkdir -p my_PDF/python && mv *.pdf $_
下面的一行代码怎么样(在bash中):
mkdir --parents ./some/path/; mv yourfile.txt $_
分解一下:
mkdir --parents ./some/path
# if it doesn't work; try
mkdir -p ./some/path
创建目录(包括所有中间目录),之后:
mv yourfile.txt $_
将文件移动到该目录($_扩展为传递给上一个shell命令的最后一个参数,即:新创建的目录)。
我不确定这在其他shell中工作到什么程度,但它可能会给您一些关于寻找什么的想法。
下面是一个使用该技术的例子:
$ > ls
$ > touch yourfile.txt
$ > ls
yourfile.txt
$ > mkdir --parents ./some/path/; mv yourfile.txt $_
$ > ls -F
some/
$ > ls some/path/
yourfile.txt
也许是下面的shell脚本?
#!/bin/sh
if [[ -e $1 ]]
then
if [[ ! -d $2 ]]
then
mkdir --parents $2
fi
fi
mv $1 $2
这是最基本的部分。你可能想要添加一些来检查参数,如果目标目录存在,或者源目录存在,或者不存在(即不要覆盖不存在的东西),你可能想要改变行为。