除了一个文件外,BASH 复制所有文件

除了名为 Default.png 的文件之外,我希望从目录中复制所有文件。似乎有很多方法可以做到这一点。你觉得什么最有效?

122119 次浏览

应具备以下条件:

cp -r !(Default.png) /dest

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

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

我会这么做:

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

除非文件很大,否则使用。

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

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

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

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


-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity
cp `ls | grep -v Default.png` destdir
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude

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

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

除了 not _ to _ copy _ file 之外,所有内容都将被复制

-- 如果有什么问题,请说明!

2022年1月更新:

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

首先,让 “临时”文件夹:

mkdir temp

其次,将所有文件从 你的原始文件夹复制到 “临时”文件夹:

“-R”标志可以完全复制所有文件,包括“符号链接”

cp -R originalFolder/. temp/

第三,从 “临时”文件夹中移除 “ Default.png”:

rm temp/Default.png

最后,将所有文件从 “临时”文件夹复制到 你的目标文件夹:

cp -R temp/. destinationFolder/

此外,这是没有 “临时”文件夹的最短路径:

cp -R originalFolder/!(Default.png) destinationFolder/

下面的脚本为我工作

cp -r `ls -A | grep -v 'skip folder/file name'` destination