【问题标题】:Bash how to mv a file to target and create intermediate folders if they do not existBash 如何将文件 mv 定位并创建中间文件夹(如果它们不存在)
【发布时间】:2015-06-18 07:41:04
【问题描述】:

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

【问题讨论】:

  • -p 选项适用于 mkdir,而不是 cp
  • GNU cp 也有一个 -p 选项,但 OS X 不使用 GNU 版本。

标签: macos bash


【解决方案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 的使用和具体测试和选项由您决定。当然,第三个选项是简单地将函数的内容保存为脚本,使其可执行并能够在您的路径中找到,并根据需要调用它。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 2013-01-17
    • 2013-11-05
    • 2020-07-12
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多