BASH复制除一个以外的所有文件

时间:2009-08-21 18:35:55

标签: bash scripting copy

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

8 个答案:

答案 0 :(得分:124)

应如下:

cp -r !(Default.png) /dest

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

cp -r !(Default.png|example) /example

答案 1 :(得分:60)

rsync很长一段时间以来一直是我的cp / scp替代品:

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

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity

答案 2 :(得分:44)

简单,如果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/ {} +

答案 3 :(得分:3)

我只是这样做:

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

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

find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/

答案 4 :(得分:0)

cp `ls | grep -v Default.png` destdir

答案 5 :(得分:-1)

# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude

答案 6 :(得分:-1)

这非常适合复制除节点模块以外的所有内容:)享受和多数民众赞成在上述答案。 Rsync => CP,您可以看到进度...

rsync -av从/到/ --exclude = node_modules

答案 7 :(得分:-2)

在正则表达式中使用shell的扩展参数

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

除了not_to_copy_file

之外的所有内容都会被复制。

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