繁体   English   中英

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

[英]BASH copy all files except one

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

应该如下:

cp -r !(Default.png) /dest

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

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

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

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

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

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

我只会做:

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

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

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

2022 年 1 月更新:

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

首先,制作“temp”文件夹

mkdir temp

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

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

cp -R originalFolder/. temp/

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

rm temp/Default.png

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

cp -R temp/. destinationFolder/

下面的脚本对我有用

cp -r `ls -A | grep -v 'skip folder/file name'` destination
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude

这非常适合复制除节点模块以外的所有内容:)享受和那就是上面的答案。 Rsync => CP,因为你可以看到进展......

rsync -av from / to / --exclude = node_modules

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM