it-swarm.com.ru

BASH скопировать все файлы, кроме одного

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

84
Joe Cannatti

Просто, если 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/ {} +
45
John Kugelman

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

cp -r !(Default.png) /dest

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

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

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

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

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

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

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

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

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