创建新的 Mac 终端命令来复制文件夹

创建新的 Mac 终端命令来复制文件夹

如何创建一个新的终端命令,将一个文件夹(这将始终是同一个文件夹)及其内容复制到当前目录(如果没有提供路径)或提供的路径。

该命令应采用以下参数:

  1. 要将内容复制到的新文件夹的名称(即mkdir myNewFolder
  2. 创建新文件夹并将内容粘贴到其中的目录的路径。

我希望得到这样的结果:

$ createsite newFolderName ./Desktop/sites/

我真的不知道从哪里开始。所以任何帮助我都感激不尽

答案1

如果你不想简单地使用mkdir -p,然后cp,那么你也可以创建一个相当强大的函数来复制it wall always be the same folder到给出的目录名,dirnm作为第一个参数(如果没有给出第二个参数,则在当前工作目录中)或者如果在参数中给出了/destpath/dirnm表示的路径作为destpath第二个论点

在形成所涉及的路径时,您需要检查(并删除) destpath/dirnm 中的前导和尾随字符,并且 destpath/dirnm'/'中的dirnm任何尾随字符始终是相同的文件夹destpath/dirnm -a` 选项,或根据需要)。如果失败,则抛出错误并返回。以下是此类函数的一种方法:'/'destpath. You then attempt to createas given and on success copyto(with the

mkdircp ()
{
    srcdir="NameOfDirToCopy"    ## the name of the dir you always copy (w/full path)

    [ -d "$srcdir" ] || {       ## validate srcdir exists
        printf "error: source directory '%s' does not exist.\n" "$srcdir"
        return 1
    }

    [ -z $1 ] && {              ## validate that required dirnm given
        printf "usage: mdcp dirnm [destpath (default ./)]\n";
        return 1
    };

    ## trim leading/trailing '/' from dirnm
    [ ${1:0:1} == '/' ] && dirnm="${1:1}" || dirnm="$1"
    [ ${1:(-1)} == '/' ] && dirnm="${dirnm%/}"

    ## if destpath given, trim trailing '/' & set destdir
    if [ -n "$2" ]; then
        [ ${2:(-1)}x == '/x' ] && destpath="${2%/}" || destpath="$2"
        [ -n "$2" ] && destdir="${destpath}/${dirnm}"
    else
        destdir="./$dirnm"    ## default destdir in ./
    fi

    ## create destdir & validate or throw error
    [ -d "$destdir" ] || mkdir -p "$destdir"
    [ -d "$destdir" ] || {
        printf "error: unable to create destdir '%s'. (check permissions)\n" "$destdir"
        return 1
    }

    ## copy (-recursive -archive) "$srcdir" "$destdir"
    printf "copying:  %s -> %s\n" "$srcdir" "$destdir"
    # cp -a "$srcdir" "$destdir"    ## (uncomment for actual copy )
}

我会将该函数包含在您的~/.bashrc(或 ~/.profile)中,或者您可以在当前 shell 中手动输入/导出它。我还将创建一个方便的方法alias来减少在声明之后的输入,.bashrc例如:

alias mdcp='mkdircp'

使用别名后,用法为:

mdcp dirnm [destpath (default: ./)]

复制it wall always be the same folderdestpath/dirnm。如果您有任何问题或需要稍微调整一下,请告诉我。

答案2

我会使用一个函数。将这些行添加到您的~/.profile(或者,如果不是在 OSX 上,则添加到您的~/.bashrc):

createsite(){
    ## Change this to point to the folder you want to copy
    source="/path/to/source/folder"

    ## If no parameters were given, copy to the current directory
    if [ $# -eq 0 ];
    then    
        cp -rv "$source" .
    ## If an argument was given
    elif [ $# -eq 1 ]
    then
        ## Create the directory. The -p suppresses error messages
        ## in case the directory exists.
        mkdir "$1"
        ## Copy
        cp -rv "$source" "$1"/
    ## If more than one was given, something's wrong.
    else
        echo "Usage: $0 [target_directory]";
        exit 1;
    fi
}

然后打开一个新终端,你可以运行

createsite foo

这会将 的内容复制/path/to/source/folder到新创建的目录中foo。请注意,这是一种非常简单的方法,如果目录存在或文件将被覆盖,则不会发出警告。

或者,只需运行createsite它就会复制到当前目录。

答案3

rsync 是一个可以帮助您的命令。它可以通过查看两个文件夹之间的差异来高效地同步它们。它也可以通过网络工作。

rsync source destination

源或目标都可以是表达式,例如pwd或 ${HOME};相对的,例如 . ;或固定的,例如 /tmp

欲了解更多信息,请阅读详细手册页:

man rsync

相关内容