Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

cp -r !(Default.png) /dest

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

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

Ответ 3

rsync была моей заменой cp/scp в течение длительного времени:

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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