Копирование файлов и папок с помощью cp с помощью shopt extglob - ошибка не является каталогом

Я пытаюсь скопировать файлы из каталога, исключая папку и файл. Моя проблема в том, что вы получаете ошибку при активированном покупаемом extglob. Вот мой код:

DEPLOY_SIMULATION_ENV="/home/user/Desktop/fancyproject/"
shopt -s extglob
cp -r ./!(nbproject|zexp.html) "$DEPLOY_SIMULATION_ENV"
shopt -u extglob

Это дает мне

‘/home/user/Desktop/myfancyproject/’ is not a directory

Конечно, я хочу, чтобы cp автоматически создал каталог myfancyproject. У меня сначала есть обходной путь с mkdir $DEPLOY_SIMULATION_ENV, но есть ли способ сделать это с помощью cp? Он ведет себя странно, когда активен extglob.

1 ответ

Решение

Вы уверены, что проблема не в использовании "пользователя" здесь...

DEPLOY_SIMULATION_ENV="/home/user/Desktop/fancyproject/"

Если имя учетной записи не "пользователь", произойдет сбой с той же ошибкой, что и вы. Тебе нужно $USER если вы хотите фактического пользователя.


Есть ли способ сделать это с помощью cp

Да... но не так, как вы ожидаете.

--родители

Сформируйте имя каждого файла назначения, добавив в целевой каталог косую черту и указанное имя исходного файла. Последний аргумент, передаваемый cp, должен быть именем существующего каталога. Например, команда:

      cp --parents dir1/dir2/file1 dir3

создаст /dir1/dir2 внутри dir3 (должен уже существовать) и скопировать file1 внутрь.

Другие вопросы по тегам