如何有选择地将文件从一个目录复制到另一个目录?

如何有选择地将文件从一个目录复制到另一个目录?

在 Linux 上,如何有选择地将大多数(但不是全部)文件从一个目录 ( dir1) 复制到另一个目录 ( dir2)?

我不想将*.c文件复制*.txtdir2.

在线手册页cp无法帮助我。

答案1

除了 eboix 的find命令(它会在空格上中断,我将在最后放置一两个更安全的方法),您还可以使用bashextglob功能:

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

bash有关使用 extglob 可以执行的更多操作,请参阅手册页。请注意,这不是递归的,因此只会dir1直接移动文件,而不是子目录。该find方法是递归的。


更安全的find命令:

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

对于更多模式,只需添加更多! -name语句:

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +

答案2

尝试这个:

find ./ ! -name '*.c' | xargs -i cp {} dest_dir

答案3

您可以从 dir1 使用以下命令:

cpls|egrep -v .txt\|.c目录2

“ ls|egrep -v .txt\|.c ”部分将列出名称中不带 .c 和 .txt 的文件。 cp 会将它们复制到 dir2

相关内容