Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中,将目录中的所有文件复制到本地子目录_Linux_Bash - Fatal编程技术网

在linux中,将目录中的所有文件复制到本地子目录

在linux中,将目录中的所有文件复制到本地子目录,linux,bash,Linux,Bash,我有一个具有以下结构的目录: file_1 file_2 dir_1 dir_2 # etc. new_subdir 我想在new_subdir中复制此目录中的所有现有文件和目录。如何通过linux终端实现这一点?你是说像这样 cp -R * new_subdir ? cp将-R作为参数,表示递归(因此,也可以复制目录),*表示所有文件(和目录) 虽然*包含新的子目录本身,但cp检测到这种情况并忽略新的子目录(因此它不会将其复制到自身中!)尝试以下操作: cp -R * /path_to_

我有一个具有以下结构的目录:

file_1
file_2
dir_1
dir_2
# etc.
new_subdir
我想在
new_subdir
中复制此目录中的所有现有文件和目录。如何通过linux终端实现这一点?

你是说像这样

cp -R * new_subdir
?

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

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

尝试以下操作:

 cp -R * /path_to_new_dir/

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

通过find-exec复制:
find-regex'.*/new_subdir'-regex'.'-exec cp-r'{}'new_subdir\

这段代码使用正则表达式查找所有不是新的_subdir的文件和目录(在当前目录中),并将它们复制到新的_subdir中。
-regex“.”
位用于防止包含当前目录本身。使用find是我所知道的最强大的技术,但是它冗长而且有时有点混乱

使用extglob复制:
cp-r!(新建分区)新建分区

如果为bash终端启用了extglob(可能是这样),那么您可以使用!将当前目录中所有非新的\u子目录复制到新的\u子目录中

不带extglob的复制:
mv*新的子目录;cp-r新分区/*。


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

您可能还想看看是否要确保
新的子目录
被排除在
*
之外,并且没有生成任何警告您没有移动,而是在复制