在 Linux 上,如何有选择地将大多数(但不是全部)文件从一个目录 ( dir1
) 复制到另一个目录 ( dir2
)?
我不想将*.c
文件复制*.txt
到dir2
.
在线手册页cp
无法帮助我。
答案1
除了 eboix 的find
命令(它会在空格上中断,我将在最后放置一两个更安全的方法),您还可以使用bash
的extglob
功能:
# 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