2016-11-11 3 views
0

Очень простой вопрос, но меня беспокоит. Я хочу скопировать все файлы в одну папку в другую папку в сценарии оболочки. Как это:Shell Script: копирование файлов с помощью подстановочных знаков (*) из одной папки в другую.

#!/bin/sh 
cp data/* /tmp/data 

Но получил error: zsh:1: no matches found: data/*

Чтение различных сообщений на StackOverflow, как здесь: Copying files with wildcard (*) to a folder in a bash script - why isn't it working? Я пробовал:

cp "data"/* /tmp/data 
Error: zsh:1: no matches found: data/* 
cp -r data /tmp/data 
Error cp: cannot stat `data': No such file or directory 

Я мог бы проверить папку данных содержит файлы, и я m в папке данных родительского каталога. Если я сделаю ls data в скрипте, содержимое его будет правильно напечатано.

Может ли кто-нибудь помочь? Я использую zsh.

+0

Каков текущий рабочий каталог при запуске скрипта? (То есть, что такое вывод, если вы вызываете 'pwd' непосредственно перед вызовом' cp'? – chepner

+0

Как вы запускаете скрипт? Я удивлен, что вы получаете zsh-ошибку о 'data/*' в строке 1 когда это скрипт 'sh', где строка 1 является комментарием. –

+0

@chepner Текущий каталог является родительским каталогом данных. Как я уже сказал, добавив ли я данные' ls' после команды cp в скрипте, он распечатает папку – ruyuan

ответ

1

Я думаю, что команда, которую вы ищете, может быть cp -r data /tmp/. Он создаст каталог data в /tmp/.

+0

Да, я согласен с назначением места назначения. Но проблема в том, что команда вообще не может распознать папку «данные». – ruyuan

+0

Исторические версии утилиты 'cp' имели опцию' -r'. Эта реализация поддерживает этот параметр; однако его использование сильно обескуражено, так как оно неправильно копирует специальные файлы, символические ссылки или fifo. –

+0

@ruyuan Это может быть связано с тем, что каталог «данных», в котором работает оболочка, является каталогом/tmp/data, поскольку он еще не существует или рабочий каталог, из которого выполняется команда, не находится в том же как «данные», где вам нужно либо указать полный путь, либо сначала перейти в каталог перед копированием. – CodeWarrior