Назад | Перейти на главную страницу

Как мне скопировать это с помощью командной строки Unix / Linux?

У меня есть такая структура папок:

MAT11NA_09_XX_XX_XXX
MAT11NA_09_XX_XX_XXXL
MAT11NA_11_XX_XX_XXX
MAT11NA_11_XX_XX_XXXL
MAT11NA_10_XX_XX_XXX
MAT11NA_10_XX_XX_XXXL

Я хочу скопировать с этого сервера на другой только папку MAT11NA_09_XX_XX_XXX, но нет MAT11NA_09_XX_XX_XXXL. Когда я закончу с этим, я хочу скопировать MAT11NA_09_XX_XX_XXXL но нет MAT11NA_09_XX_XX_XXX. Эта часть MAT11NA_09_ не меняется, L в конце тоже не меняется.

То же и с остальными папками ...

Как мне сделать это в командной строке Unix / Linux?

Спасибо.

С буквой "L"

cp -r *L destination

Без буквы "L"

cp -r *[^L] desyination

Я знаю, что это глупо, но, по крайней мере, все прямо.

Это скопирует все файлы / каталоги, заканчивающиеся на L:

cp `ls | grep -E 'L$'` DEST

Это скопирует все файлы / каталоги НЕ заканчивается на L:

cp `ls | grep -vE 'L$'` DEST

Замените DEST на пункт назначения.

Для тех, кому нужна буква L, просто сделайте:

scp -r MAT*L destserver:/whatever/

Делать те, которые делают не есть L, вам нужны расширенные Globs с bash:

shopt -s extglob
scp -r ./!(MAT*L) destever:/whatever/

Я не тестировал это с помощью scp, но это примерно способ сделать это. Вы также можете использовать команду find с чем-то вроде (для тех, у кого нет L).

find . ! -iname 'MAT*L' ! -iname '.*' -print0 | xargs -0 tar zcf foo.tar.gz

а затем просто скопируйте файл tar.

Хорошо, я перепробовал их все.

"scp -r MAT*L destserver:/whatever/"- похоже, это работает.

shopt extglob
scp -r ./!(MAT*L) destever:/whatever/

Для этого я выполнил команду "shopt extglob", потом сделал копию. Но у меня такая ошибка"-bash: !: event not found"... значит, это не работает.

Я попробовал также первый ответ ... Структура папок примерно такая:

folder1
   MAT11NA_09_XX_XX_XXX
   MAT11NA_09_XX_XX_XXXL
   MAT11NA_11_XX_XX_XXX
   MAT11NA_11_XX_XX_XXXL
   MAT11NA_10_XX_XX_XXX
   MAT11NA_10_XX_XX_XXXL   

Я хочу взять MAT11NA_09_XX_XX_XXX папки и положить в папку на другом сервере.

Тогда я хочу взять MAT11NA_09_XX_XX_XXXL папку и поместите в другую папку на другом сервере.

Тогда ... я хочу взять MAT11NA_11_XX_XX_XXX папки и поместите в папку (отличную от папки, в которую я положил MAT11NA_09_XX_XX_XXX) на другом сервере.

То же самое для MAT11NA_11_XX_XX_XXXL...

Я не хочу помещать ВСЕ папки L в одну папку с другого сервера, и я не хочу помещать ВСЕ папки, отличные от L, в другую папку с другого сервера.

Надеюсь, на этот раз вы понимаете, извините. Спасибо.

ОБНОВИТЬ

Хорошо, после последнего ответа я использую их, и, похоже, они работают:

scp -r MAT11NA_09_*L contentuser@/destination

scp -r MAT11NA_09_*[^L] contentuser@/destination