Bash如何将文件mv定位到目标并创建中间文件夹(如果它们不存在)

时间:2015-04-13 04:25:07

标签: macos bash

我尝试使用cp -p命令,因为这里建议的另一个答案:Linux: copy and create destination dir if it does not exist,但由于某些原因我在Mac上的bash shell上,它实际上并没有复制父文件夹结束了。

1 个答案:

答案 0 :(得分:1)

如果您愿意,您还可以使用函数创建自己的copydeep例程。有几种方法可以使其可用。第一个是您的~/.bashrc文件,第二个是在shell中导出函数。在您的bashrc中,您可以简单地声明该函数以使其可用。要从命令行导出函数,只需输入函数(或从您喜欢的编辑器复制/粘贴),然后使用export -f funcitonname导出函数。 (击)

注意我还没有在OSX上测试,只是Linux,但只要你有类似的导出功能,它或类似的东西应该可以工作。

快速破解名为cpd的copydeep函数。 (您也可以使用较长的名称输入该名称,例如copydeepalias cpd='copydeep'

输入/粘贴功能:

$ cpd () {
    [ -z $1 ] || [ -z $2 ] && {
        printf "usage: cpd file /path/path1/etc...\n";
        return 1
    }
    mkdir -p "$2" || {
        printf "error: unable to create directory '%s' (check write permission)\n" "$2";
        return 1
    }
    cp "$1" "$2"
}

导出它:

$ export -f cpd

测试/用途:

$ cpd tmp.c this/long/path

$ ls -l this/long/path/
-rw-r--r-- 1 david david 1161 Apr 13 00:01 tmp.c

$ cpd
usage: cpd file /path/path1/etc...

注意:这只是用于最小输入测试的基本副本的示例。 mkdircp的使用和具体测试和选项取决于您。当然,第三个选项只是将函数的内容保存为脚本,使其可执行并能够在您的路径中找到,并根据需要调用它。