在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在尝试将目标文件夹移动到自身内部时只会抛出一个错误。(但它成功地移动了其他所有文件和文件夹。)您可能还想看看是否要确保新的子目录
被排除在*
之外,并且没有生成任何警告您没有移动,而是在复制