首页 文章

将文件从一个目录复制到现有目录中

提问于
浏览
186

在bash我需要这样做:

  • 获取目录中的所有文件

  • 将它们复制到现有目录中

我该怎么做呢?我试过 cp -r t1 t2 (t1和t2都是现有目录,t1中有文件)但是它在t2里面创建了一个名为t1的目录,我不想这样,我需要t1中的文件直接进入t2 . 我该怎么做呢?

6 回答

  • 2

    如果要将某个目录中的内容复制到当前目录中,请执行以下操作:

    cp dir1/* .
    

    这假设您没有尝试复制隐藏文件 .

  • 299
    cp dir1/* dir2
    

    或者如果您在dir1中有目录,那么您也想要复制

    cp -r dir1/* dir2
    
  • 23
    cp -R t1/ t2
    

    源目录上的尾部斜杠稍微改变了语义,因此它复制内容但不复制目录本身 . 它还避免了Bertrand的答案所具有的globbing和不可见文件的问题(复制 t1/* 错过了不可见文件,复制`t1 / * t1 /.* ' copies t1/. and t1/.., which you don't想要) .

  • 29

    根据某些细节,您可能需要执行以下操作:

    r=$(pwd)
    case "$TARG" in
        /*) p=$r;;
        *) p="";;
        esac
    cd "$SRC" && cp -r . "$p/$TARG"
    cd "$r"
    

    ...这基本上会更改为SRC目录并将其复制到目标,然后返回到您启动的任何位置 .

    额外的烦恼是处理相对或绝对目标 .

    (这不依赖于 cp 命令本身的细微语义......关于它如何处理源规范有或没有尾随/ ...因为我不确定它们是否稳定,可移植且可靠,而不仅仅是GNU cp 我将来不会继续这样做 . )

  • 2

    你想要的是:

    cp -R t1/. t2/
    

    最后的点告诉它复制当前目录的内容,而不是目录本身 . 此方法还包括隐藏文件和文件夹 .

  • 2

    假设t1是包含文件的文件夹,t2是空目录 . 你想要的是这样的:

    sudo cp -R t1/* t2/
    

    请记住,对于第一个示例,t1和t2必须是完整路径或相对路径(基于您的位置) . 如果需要,可以导航到空文件夹(t2)并执行以下操作:

    sudo cp -R t1/* ./
    

    或者您可以导航到包含文件的文件夹(t1)并执行以下操作:

    sudo cp -R ./* t2/
    

    注意:*符号(或通配符)代表所有文件和文件夹 . -R标志表示递归(所有内容中的所有内容) .

相关问题