2013-10-22 6 views
0

Я очень новый в сценарии sh/bash, и у меня есть следующая проблема:Команда cp не создает каталог в сценарии sh bash, почему?

У меня есть сценарий, который создает какой-то каталог и копирует в него некоторые файлы, но, похоже, не работает !!!

В моем сценарии у меня есть следующие строки кода:

# Creazione Nuovo Pacchetto per Ubuntu 
JRE_I386="jre1.6.0_35-i386" 
JRE_AMD64="jre1.6.0_35-x86_64" 

ApplicationName="XCloud" 

# Se il primo parametro è una stringa vuota mostra il messaggio di errore ed esce: 
if [ -z $1 ]; then 
    echo "Usage: createpkg.sh <rev package>" 
    exit 

# Altrimenti setta la variabile CURRENT_VERSION con il valore del parametro di input passato: 
else 
    CURRENT_VERSION=$1  
fi 

echo --------------------------------------------------------------------------------------------------- 
echo --------------------------------------------------------------------------------------------------- 
echo 
echo CREAZIONE NUOVO PACCHETTO ${ApplicationName}${CURRENT_VERSION} 
echo 
echo --------------------------------------------------------------------------------------------------- 
echo --------------------------------------------------------------------------------------------------- 

# Verifica esistenza ambiente prima di generare la nuova versione. Se esiste torna ERRORE: 
if [ -e "${ApplicationName}${CURRENT_VERSION}ubuntu1-i386" ]; then 
    echo "Errore: la cartella contenente la nuova versione da creare gia' esiste" 
    exit 
fi 
if [ -e "${ApplicationName}${CURRENT_VERSION}ubuntu1-amd64" ]; then 
    echo "Errore: la cartella contenente la nuova versione da creare gia' esiste" 
    exit 
fi 

# Copia dell' alberatura completa (recursive and force), copia PACKAGE nella destinazione: 
cp -Rf PACKAGE ${ApplicationName}${CURRENT_VERSION}ubuntu1-i386 
cp -Rf PACKAGE ${ApplicationName}${CURRENT_VERSION}ubuntu1-amd64 
echo "Copia dell' alberatura completata" 

# Copia della JRE corretta: 
cp -Rf ../JRE/${JRE_I386} ${ApplicationName}${CURRENT_VERSION}ubuntu1-i386/usr/share/${ApplicationName}/jre1.6.0_35 
cp -Rf ../JRE/${JRE_AMD64} ${ApplicationName}${CURRENT_VERSION}ubuntu1-amd64/usr/share/${ApplicationName}/jre1.6.0_35 
echo "Copia della JRE corretta completata" 
...................................................................................... 
...................................................................................... 
SOME OTHER STUFF 
...................................................................................... 
...................................................................................... 

Проблема возникает с последним 2 ф команды, потому что, когда он попытаться выполнить эти строки:

cp -Rf ../JRE/${JRE_I386} ${ApplicationName}${CURRENT_VERSION}ubuntu1-i386/usr/share/${ApplicationName}/jre1.6.0_35 
cp -Rf ../JRE/${JRE_AMD64} ${ApplicationName}${CURRENT_VERSION}ubuntu1-amd64/usr/share/${ApplicationName}/jre1.6.0_35 

когда Я запускаю скрипт, в оболочке, он говорит мне что-то, что по-английски звучит так: невозможно создать каталог «DIRECTORYNAME»: Файл или каталог не существует

Infact мой выход в оболочке заключается в следующем:

cp: impossibile creare la directory "XCloud1ubuntu1-i386/usr/share/XCloud/jre1.6.0_35": File o directory non esistente 
cp: impossibile creare la directory "XCloud1ubuntu1-amd64/usr/share/XCloud/jre1.6.0_35": File o directory non esistente 

В чем проблема? Что я делаю не так?

Tnx

Andrea

+0

Вы пытались сделать точно такой же 'cp' в терминальной стадии, шаг за реконструировать этот вопрос? Может быть, есть опечатки для пути или у вас нет правильных прав ?! – EverythingRightPlace

+0

Посмотрите здесь: http: // stackoverflow.com/questions/1529946/linux-copy-and-create-destination-dir-if-it-does-not-exist – Refael

ответ

0

Вам нужно создать каталоги, прежде чем копировать в них, посмотрите на команду MKDIR

0

Попробуйте добавить

mkdir -p ${ApplicationName}${CURRENT_VERSION}ubuntu1-i386/usr/share/${ApplicationName}/jre1.6.0_35

и

mkdir -p ${ApplicationName}${CURRENT_VERSION}ubuntu1-amd64/usr/share/${ApplicationName}/jre1.6.0_35

перед двумя линиями cp.

+0

mmm таким образом, похоже, не создает проблему, но теперь у меня есть еще одно сомнение, почему с помощью 2 предыдущая команда cp не создает ту же ошибку и id У меня нет этих каталогов? Я ссылаюсь на эту команду 2: cp -Rf PACKAGE $ {ApplicationName} $ {CURRENT_VERSION} ubuntu1-i386 cp -Rf PACKAGE $ {ApplicationName} $ {CURRENT_VERSION} ubuntu1-amd64 echo "Copia dell 'alberatura completata" – AndreaNobili

+0

Добавить флаг '-v' (verbose) для первого cp, чтобы проверить, что происходит. Возможно, структурированное копирование - это не то, что вы думаете, или, может быть, опечатка останется где-то. 'cp -Rfv source destination' – damienfrancois

0

Посмотрите здесь, как копировать файлы и создать каталог, если он не существует:

Linux: copy and create destination dir if it does not exist

Вы можете проверить, если directort будет существовать, как это:

if [ -d ~/directorypath ]; then 
    echo "exist!" 
else 
    mkdir ~/directorypath 
fi 

вы можете сделать это в одной кодовой строке:

if [ ! -d ~/directorypath ]; then mkdir ~/directorypath; fi 
+0

' test -d ~/путь к каталогу || mkdir ~/directorypath' или просто 'mkdir -p ~/directorypath' – aragaer

+0

mkdir -p ~/dir1/dir2/dir3 #, чтобы создать 3 каталога. – Refael

0

Сначала создайте каталог f или данный путь

mkdir /home/test 

затем скопировать файл из получателя к источнику

cp /home.a.txt /home/test 
Смежные вопросы