【问题标题】:Copy all files in a directory to a local subdirectory in linux将目录中的所有文件复制到linux中的本地子目录
【发布时间】:2012-04-08 05:10:36
【问题描述】:

我有一个目录结构如下:

file_1
file_2
dir_1
dir_2
# etc.
new_subdir

我想复制new_subdir 中此目录中的所有现有文件和目录。如何通过 linux 终端完成此操作?

【问题讨论】:

  • 你不是在移动,你是在复制

标签: linux bash


【解决方案1】:

这是一个老问题,但似乎没有一个答案有效(它们会导致目标文件夹被递归复制到自身中),所以我想我会提供一些工作示例:

通过 find -exec 复制:

find . ! -regex '.*/new_subdir' ! -regex '.' -exec cp -r '{}' new_subdir \;

此代码使用正则表达式查找所有不是 new_subdir 的文件和目录(在当前目录中)并将它们复制到 new_subdir 中。 ! -regex '.' 位在其中以防止当前目录本身被包含在内。使用 find 是我所知道的最强大的技术,但它是冗长的,有时有点令人困惑。

用 extglob 复制:

cp -r !(new_subdir) new_subdir

如果您为 bash 终端启用了 extglob(可能就是这种情况),那么您可以使用 !将当前目录中所有不是 new_subdir 的东西复制到 new_subdir 中。

不带 extglob 的复制:

mv * new_subdir ; cp -r new_subdir/* .

如果您没有 extglob 并且 find 对您没有吸引力,并且您确实想做一些 hacky,您可以将所有文件移动到子目录中,然后递归地将它们复制回原始目录。与将目标文件夹复制到自身中的 cp 不同,当 mv 尝试将目标文件夹移动到自身内部时,它只会引发错误。 (但它成功地移动了所有其他文件和文件夹。)

【讨论】:

    【解决方案2】:

    尝试类似:

     cp -R * /path_to_new_dir/
    

    【讨论】:

      【解决方案3】:

      你的意思是喜欢

      cp -R * new_subdir
      

      ?

      cp-R 作为参数,表示递归(因此,也复制目录),* 表示所有文件(和目录)。

      虽然* 包含new_subdir 本身,但cp 检测到这种情况并忽略new_subdir(因此它不会将其复制到自身中!)

      【讨论】:

      • 如果您想确保将new_subdir* 中排除并且不生成警告,您可能还想查看this
      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2016-07-04
      • 2014-08-14
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多