2011-11-25 12 views
5

Próbuję utworzyć skrypt, który skopiuje pliki z katalogu i umieści skopiowane pliki w nowym katalogu.Jak łączyć polecenia powłoki

Wiem, że polecenie cp skopiuje pliki, a komenda mkdir utworzy katalog, ale czy ktoś wie, jak połączyć te 2 polecenia w jedną linię?

tej pory mam

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

daje komunikat o błędzie

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 

Jednak to nie utworzyć katalog newdir

Odpowiedz

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

Wywoła to mkdir aby utworzyć strukturę katalogów, sprawdź, czy wykonanie polecenia się powiodło i zadzwoń cp polecenie, jeśli było.

+0

Działa to dzięki bardzo dużo, chociaż ma pochodzić z komunikatem o błędzie ... cp: katalog pomijając „mkdir” – user1065861

+0

@ user1065861 : 'cp' domyślnie nie kopiuje katalogów. Musisz podać opcję '-p', jeśli chcesz to zrobić. Sprawdź zawartość katalogu '/ root' - prawdopodobnie podczas tworzenia tych poleceń utworzyłeś niezamierzone katalogi. –

+0

Błąd ... Opcja '-r', przepraszam. –

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

Umieść średnik między dwoma poleceniami

0

Dzieje się tak dlatego, że nie mówią skorupę gdzie koniec dokładnie polecenia. W tym przypadku:

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

Twoje polecenia cp pójdzie jako argument do komendy mkdir i powłoki stara się plik o nazwie cp. To samo dzieje się z wszystkimi innymi.

Umieszczając ; po poleceniach. Informuje powłokę, że polecenie zostało zakończone, a następne słowo jest kolejnym poleceniem.

newline (klawisz Return) jest również traktowany jako seprator polecenia. Więc jeśli umieścisz każde polecenie w kolejnej linii, to również działa dobrze. więc można spróbować jednego z nich:

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

LUB

mkdir /root/newdir/ 

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

Dobre wyjaśnienie, ale dla rozwiązania wolę ['&&'] (http://stackoverflow.com/a/8271018/667820) ponad ';' jako pierwsze dba o możliwość wystąpienia błędu 'mkdir'. –

Powiązane problemy