因此,如果我在我的主目录中,我想将foo.c移动到~/bar/baz/foo.c,但这些目录不存在,是否有某种方法可以自动创建这些目录,以便您只需键入
mv foo.c ~/bar/baz/
然后一切都会好起来吗?似乎您可以将mv作为一个简单的bash脚本的别名,该脚本将检查这些目录是否存在,如果不存在,将调用mkdir,然后调用mv,但我认为我应该检查一下是否有人有更好的想法。
发布于 2009-02-13 22:22:11
下面这一行如何(在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
发布于 2012-06-22 03:19:06
mkdir -p `dirname /destination/moved_file_name.txt`
mv /full/path/the/file.txt /destination/moved_file_name.txt
发布于 2012-04-26 11:54:06
另存为名为mv.sh的脚本
#!/bin/bash
# mv.sh
dir="$2" # Include a / at the end to indicate directory (not filename)
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "$@"
或者将其放在~/.bashrc文件的末尾,作为替换每个新终端上的默认mv的函数。使用函数可以让bash保留内存,而不必每次都读取脚本文件。
function mvp ()
{
dir="$2" # Include a / at the end to indicate directory (not filename)
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "$@"
}
示例用法:
mv.sh file ~/Download/some/new/path/ # <-End with slash
这些是基于Chris Lutz提交的。
https://stackoverflow.com/questions/547719
复制相似问题