【问题标题】:cp command don't create directory in a sh\bash script, why?cp 命令不在 sh\bash 脚本中创建目录,为什么?
【发布时间】:2013-10-31 13:47:20
【问题描述】:

我是 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

安德烈亚

【问题讨论】:

标签: linux bash shell ubuntu sh


【解决方案1】:

复制前需要先创建目录,查看命令mkdir

【讨论】:

    【解决方案2】:

    尝试添加

    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 行之前。

    【讨论】:

    • 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"
    • -v 标志(详细)添加到第一个 cp 以检查发生了什么。可能复制的结构不是您想的那样,或者某个地方仍然存在拼写错误。 cp -Rfv source destination
    【解决方案3】:

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

    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
    

    【讨论】:

    • test -d ~/directorypath || mkdir ~/directorypath 或只是mkdir -p ~/directorypath
    • mkdir -p ~/dir1/dir2/dir3 #创建3个目录
    【解决方案4】:

    首先为给定路径创建目录

    mkdir /home/test
    

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

    cp /home.a.txt /home/test
    

    【讨论】:

      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2013-09-15
      相关资源
      最近更新 更多