BASH скопировать все файлы, кроме одного - PullRequest
84 голосов
/ 21 августа 2009

Я хотел бы скопировать все файлы из каталога, кроме одного с именем Default.png. Кажется, есть несколько способов сделать это. Что кажется вам наиболее эффективным?

Ответы [ 7 ]

124 голосов
/ 21 августа 2009

Должно быть следующим:

cp -r !(Default.png) /dest

Если вы копируете в папку, вложенную в текущую папку (например, в приведенном ниже примере), вам нужно также опустить этот каталог:

cp -r !(Default.png|example) /example
61 голосов
/ 21 августа 2009

rsync долгое время был моей заменой cp / scp:

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

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose               increase verbosity
45 голосов
/ 21 августа 2009

Простой, если 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 голосов
/ 21 августа 2009

Я бы просто сделал:

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

, если файлы не большие. В противном случае используйте, например,

find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
0 голосов
/ 17 декабря 2018

Это прекрасно работает для копирования всего, кроме узловых модулей :) наслаждайтесь и вот на ответы выше. Rsync => CP, как вы можете видеть прогресс ...

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

0 голосов
/ 22 мая 2013
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
0 голосов
/ 21 августа 2009
cp `ls | grep -v Default.png` destdir
...