Я хотел бы скопировать все файлы из каталога, кроме одного имени Default.png. Кажется, что есть несколько способов сделать это. Что вам кажется наиболее эффективным?
BASH копировать все файлы, кроме одного
Ответ 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