135

我想从一个目录中复制所有文件,除了一个名为 Default.png 的文件。似乎有很多方法可以做到这一点。什么对你来说最有效?

4

8 回答 8

176

应该如下:

cp -r !(Default.png) /dest

如果复制到嵌套在当前文件夹中的文件夹(在下面的例子中称为示例),您还需要省略该目录:

cp -r !(Default.png|example) /example
于 2009-08-21T18:40:16.857 回答
87

rsync 长期以来一直是我的 cp/scp 替代品:

rsync -av from/ to/ --exclude=Default.png

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity
于 2009-08-21T18:59:42.293 回答
62

简单,如果src/只包含文件:

find src/ ! -name Default.png -exec cp -t dest/ {} +

如果src/有子目录,则忽略它们,但会复制其中的文件:

find src/ -type f ! -name Default.png -exec cp -t dest/ {} +

如果src/有子目录,这不会递归到它们:

find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +
于 2009-08-21T18:59:15.337 回答
2

我只是这样做:

cp srcdir/* destdir/ ; rm destdir/Default.png

除非文件很大。否则使用例如

find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
于 2009-08-21T18:41:13.267 回答
2
cp `ls | grep -v Default.png` destdir
于 2009-08-21T19:01:52.210 回答
0

2022 年 1 月更新:

这是最简单的方法(并不复杂)。

首先,制作“temp”文件夹

mkdir temp

其次,将原始文件夹中的所有文件复制到“temp”文件夹

“-R”标志可以复制包括“符号链接”在内的所有文件

cp -R originalFolder/. temp/

第三,从“temp”文件夹中删除“Default.png”

rm temp/Default.png

最后,将所有文件从“temp”文件夹复制您的目标文件夹

cp -R temp/. destinationFolder/

此外,这是没有“temp”文件夹的最短方法:

cp -R originalFolder/!(Default.png) destinationFolder/
于 2022-01-12T18:55:48.400 回答
-1
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
于 2013-05-22T07:25:25.693 回答
-3

将 shell 的扩展参数与正则表达式一起使用

cp /<path>/[^not_to_copy_file]* .

除了 not_to_copy_file 之外的所有内容都将被复制

——如果这有什么问题。请明确说明 !

于 2020-04-02T00:31:13.953 回答