Скопируйте все файлы с определенным расширением типа файла в скрипте

Я пытаюсь выполнить следующую команду в сценарии оболочки, где adir="mydir" и extType= *.txt

cp "$adir/$extType" "$destination" 

Однако я получаю :

cp :не может указать «mydir/ *.txt» :Нет такого файла или каталога 

но такой каталог есть, и если я запускаю его вручную в командной строке, он работает.

Есть идеи, что не так?

3
10.07.2018, 13:56
2 ответа

Вы должны изменить "$adir/$extType"на "$adir/"$extType, иначе расширение глобуса не произойдет, и он ищет файл точно с именем *.txt, который не может быть найден, и поэтому он жалуется на это с :

cp: cannot stat ‘mydir/*.txt’: No such file or directory
7
12.01.2019, 12:11

Равексина уже хорошо заметила, что подстановка не работает в двойных или одинарных кавычках, и, кстати, синтаксис cp неверен для нескольких файлов/одного места назначения и требует флага -t.

В качестве альтернативы вы можете использовать массивы bash :

extType=( "$adir"/*.txt )
cp -t "$destination"   "${extType[@]}" 

. Альтернативно, петля

for i in "$adir"/*.txt ; do cp "$i"  "$destination"; done
2
12.01.2019, 12:11
  • 1
    Спасибо я этого не знал –  Community 10.07.2018, 11:14
  • 2
    Синтаксис `cp `не _не тот _неправильный :`cp a b c d `копирует `a `, `b `и `c `в _существующий каталог _`д `. –  PerlDuck 10.07.2018, 11:20

Теги

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