2011-11-25 19 views
5

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

Я знаю, что команда cp скопирует файлы, и команда mkdir создаст каталог, но кто-нибудь знает, как объединить эти две команды в одну строку?

До сих пор я

mkdir /root/newdir/ cp /root/*.doc /root/newdir 

это дает сообщение об ошибке

mkdir: cannot create directory 'cp': Files exists 
mkdir: cannot create directory '/root/files/wp.doc: File exists 
mkdir: cannot create directory 'mkdir' : File exists 
mkdir: cannot create directory '/root/files/new dir: file exists 

Однако это создать каталог newdir

ответ

8
mkdir -p /root/newdir/ && cp /root/*.doc /root/newdir/ 

Это будет вызывать mkdir создать структуру каталогов, проверьте, выполнено ли выполнение команды, и вызовите cp команда если было.

+0

Это работает благодаря очень хотя он пришел с сообщением об ошибке ... ф: опуская каталог «MkDir» – user1065861

+0

@ user1065861 : 'cp' не копирует каталоги по умолчанию. Вы должны указать опцию '-p', если хотите, чтобы это было сделано. Проверьте содержимое своего каталога '/ root' - вероятно, вы создали непреднамеренные каталоги там, играя с этими командами. –

+0

Err ... '-r' вариант, извините. –

0

Место запятой между двумя командами

0

Это происходит потому, что вы не говорите оболочки, где конец именно команды. В этом случае:

mkdir /root/newdir/ cp /root/*.doc /root/newdir 

Ваша команда cp будет идти в качестве аргумента команды mkdir и оболочка пытается создать файл с именем cp. То же самое происходит со всеми остальными.

Поставив ; после команд. Он сообщает оболочке, что команда завершена, а следующее слово - другая команда.

newline (клавиша возврата) также рассматривается как команда seprator. Поэтому, если вы поместите каждую команду в следующую строку, она также отлично работает. Таким образом, вы можете попробовать любой из них:

mkdir /root/newdir/ ; cp /root/*.doc /root/newdir 

ИЛИ

mkdir /root/newdir/ 

cp /root/*.doc /root/newdir 
+0

Хорошее объяснение, но для решения я предпочитаю ['&&'] (http://stackoverflow.com/a/8271018/667820) над ';', поскольку первый позаботится о возможности сбоя 'mkdir'. –

Смежные вопросы