cp命令不在sh \ bash脚本中创建目录,为什么?

时间:2013-10-22 15:28:55

标签: linux bash shell ubuntu sh

我是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 命令出现问题,因为当它尝试执行这些行时:

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

当我去执行脚本时,在shell中,它告诉我一些英文听起来像:无法创建目录“DIRECTORYNAME”:文件或目录不存在

实际上我在shell中的输出是以下一个:

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

安德烈

4 个答案:

答案 0 :(得分:0)

您需要在复制之前创建目录,查看命令mkdir

答案 1 :(得分: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行之前。

答案 2 :(得分:0)

请看这里,如果不存在,如何复制文件和创建目录:

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

您可以检查直接存在是否存在:

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

你可以在一个代码行中完成:

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

答案 3 :(得分:0)

首先为给定路径创建目录

mkdir /home/test

然后将文件从目标复制到源

cp /home.a.txt /home/test