Скопировать файл в каталог с помощью подстановочных знаков или регулярного выражения в месте назначения?

Я хочу выполнить это cp debian.master/abi/2.6.38*/amd64/generic debian.master/abi/2.6.38*/amd64/core2, но bash дает ошибку во втором *:

cp: cannot create regular file `debian.master/abi/2.6.38*/amd64/core2': No such file or directory

Как копировать один файл в тот же каталог, но когда другое имя без изменения каталога или написать полное имя папки?

0
задан 6 May 2011 в 19:35

18 ответов

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

cp debian.master/abi/2.6.38*/amd64/generic "$(eval echo debian.master/abi/2.6.38*/amd64)"/core2

. Более просто вы можете сделать:

( cd debian.master/abi/2.6.38*/amd64/; cp generic core2 )

Или также

dir=debian.master/abi/2.6.38*/amd64/
cp "$dir"/generic "$dir"/core2
3
ответ дан 25 May 2018 в 21:23
  • 1
    Спасибо, второй метод более простой, но это будет: ( cd debian.master/abi/2.6.38*/amd64/; cp generic core2; ) – Juan Simón 6 May 2011 в 19:50
  • 2
    Ах хорошо. Я бы не породил подоболочку, но в этом случае cd останутся в силе. Я редактирую ответ – enzotib 6 May 2011 в 19:52
  • 3
    Первый, используя eval, опасен. eval следует избегать любой ценой. Последний не будет работать, поскольку расширение glob не происходит в назначениях переменных или внутри кавычек. Я бы сделал for f in debian.master/abi/2.6.38*/amd64/generic; do cp "$f" "${f%/generic}/core2"; done – geirha 7 May 2011 в 02:06
  • 4
    @gheira: ok для eval, но последний работает imho, пока * не цитируется, и расширение дает только одну строку, как я полагаю, предположил пользователь. – enzotib 7 May 2011 в 10:19

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

cp debian.master/abi/2.6.38*/amd64/generic "$(eval echo debian.master/abi/2.6.38*/amd64)"/core2

. Более просто вы можете сделать:

( cd debian.master/abi/2.6.38*/amd64/; cp generic core2 )

Или также

dir=debian.master/abi/2.6.38*/amd64/ cp "$dir"/generic "$dir"/core2
3
ответ дан 25 July 2018 в 22:00

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

cp debian.master/abi/2.6.38*/amd64/generic "$(eval echo debian.master/abi/2.6.38*/amd64)"/core2

. Более просто вы можете сделать:

( cd debian.master/abi/2.6.38*/amd64/; cp generic core2 )

Или также

dir=debian.master/abi/2.6.38*/amd64/ cp "$dir"/generic "$dir"/core2
3
ответ дан 26 July 2018 в 18:18

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

cp debian.master/abi/2.6.38*/amd64/generic "$(eval echo debian.master/abi/2.6.38*/amd64)"/core2

. Более просто вы можете сделать:

( cd debian.master/abi/2.6.38*/amd64/; cp generic core2 )

Или также

dir=debian.master/abi/2.6.38*/amd64/ cp "$dir"/generic "$dir"/core2
3
ответ дан 2 August 2018 в 03:33

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

cp debian.master/abi/2.6.38*/amd64/generic "$(eval echo debian.master/abi/2.6.38*/amd64)"/core2

. Более просто вы можете сделать:

( cd debian.master/abi/2.6.38*/amd64/; cp generic core2 )

Или также

dir=debian.master/abi/2.6.38*/amd64/ cp "$dir"/generic "$dir"/core2
3
ответ дан 4 August 2018 в 19:32

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

  cp debian.master / abi / 2.6.38 * / amd64 / generic "$ (eval echo debian.master / abi / 2.6.38 * / amd64)  "/ core2  

Более просто вы можете сделать:

  (cd debian.master / abi / 2.6.38 * / amd64 /; cp generic core2)   

Или также

  dir = debian.master / abi / 2.6.38 * / amd64 / cp "$ dir" / generic "$ dir" /  core2  
3
ответ дан 6 August 2018 в 03:40

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

  cp debian.master / abi / 2.6.38 * / amd64 / generic "$ (eval echo debian.master / abi / 2.6.38 * / amd64)  "/ core2  

Более просто вы можете сделать:

  (cd debian.master / abi / 2.6.38 * / amd64 /; cp generic core2)   

Или также

  dir = debian.master / abi / 2.6.38 * / amd64 / cp "$ dir" / generic "$ dir" /  core2  
3
ответ дан 7 August 2018 в 21:32

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

  cp debian.master / abi / 2.6.38 * / amd64 / generic "$ (eval echo debian.master / abi / 2.6.38 * / amd64)  "/ core2  

Более просто вы можете сделать:

  (cd debian.master / abi / 2.6.38 * / amd64 /; cp generic core2)   

Или также

  dir = debian.master / abi / 2.6.38 * / amd64 / cp "$ dir" / generic "$ dir" /  core2  
3
ответ дан 10 August 2018 в 09:49

Ошибка заключается в том, что оболочка пытается развернуть символ * glob перед выполнением команды, а пункт назначения еще не существует. Одной из возможностей преодоления этого было бы

  cp debian.master / abi / 2.6.38 * / amd64 / generic "$ (eval echo debian.master / abi / 2.6.38 * / amd64)  "/ core2  

Более просто вы можете сделать:

  (cd debian.master / abi / 2.6.38 * / amd64 /; cp generic core2)   

Или также

  dir = debian.master / abi / 2.6.38 * / amd64 / cp "$ dir" / generic "$ dir" /  core2  
3
ответ дан 13 August 2018 в 16:03
  • 1
    Спасибо, второй метод более простой, но это будет: (cd debian.master / abi / 2.6.38 * / amd64 /; cp generic core2;) – Juan Simón 6 May 2011 в 19:50
  • 2
    Ах хорошо. Я бы не породил подоболочку, но в этом случае cd остаются в силе. Я редактирую ответ – enzotib 6 May 2011 в 19:52
  • 3
    Первый, используя eval, опасен. eval следует избегать любой ценой. Последний не будет работать, поскольку расширение glob не происходит в назначениях переменных или внутри кавычек. Я сделал бы для f в debian.master / abi / 2.6.38 * / amd64 / generic; do cp & quot; $ f & quot; & Quot; $ {е% / общее} / Core2 & Quot ;; сделано – geirha 7 May 2011 в 02:06
  • 4
    @gheira: ok для eval , но последний работает imho, пока * не цитируется, и расширение дает только одну строку, так как я думаю, что пользователь полагает , – enzotib 7 May 2011 в 10:19

Предполагая, что debian.master/abi/2.6.38* расширяется до нескольких каталогов:

for dir in debian.master/abi/2.6.38*/amd64; do cp $dir/generic $dir/core2; done
0
ответ дан 25 May 2018 в 21:23

Предполагая, что debian.master/abi/2.6.38* расширяется до нескольких каталогов:

for dir in debian.master/abi/2.6.38*/amd64; do cp $dir/generic $dir/core2; done
0
ответ дан 25 July 2018 в 22:00

Предполагая, что debian.master/abi/2.6.38* расширяется до нескольких каталогов:

for dir in debian.master/abi/2.6.38*/amd64; do cp $dir/generic $dir/core2; done
0
ответ дан 26 July 2018 в 18:18

Предполагая, что debian.master/abi/2.6.38* расширяется до нескольких каталогов:

for dir in debian.master/abi/2.6.38*/amd64; do cp $dir/generic $dir/core2; done
0
ответ дан 2 August 2018 в 03:33

Предполагая, что debian.master/abi/2.6.38* расширяется до нескольких каталогов:

for dir in debian.master/abi/2.6.38*/amd64; do cp $dir/generic $dir/core2; done
0
ответ дан 4 August 2018 в 19:32

Предполагая debian.master / abi / 2.6.38 * , расширяется до нескольких каталогов:

  для dir в debian.master / abi / 2.6.38 * /  amd64;  do cp $ dir / generic $ dir / core2;  сделано  
0
ответ дан 6 August 2018 в 03:40

Предполагая debian.master / abi / 2.6.38 * , расширяется до нескольких каталогов:

  для dir в debian.master / abi / 2.6.38 * /  amd64;  do cp $ dir / generic $ dir / core2;  сделано  
0
ответ дан 7 August 2018 в 21:32

Предполагая debian.master / abi / 2.6.38 * , расширяется до нескольких каталогов:

  для dir в debian.master / abi / 2.6.38 * /  amd64;  do cp $ dir / generic $ dir / core2;  сделано  
0
ответ дан 10 August 2018 в 09:49

Предполагая debian.master / abi / 2.6.38 * , расширяется до нескольких каталогов:

  для dir в debian.master / abi / 2.6.38 * /  amd64;  do cp $ dir / generic $ dir / core2;  сделано  
0
ответ дан 13 August 2018 в 16:03

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

Похожие вопросы: