unix程序复制到dest,但如果文件存在于dest中,我应该复制到dest / duplicate

时间:2016-09-20 16:37:42

标签: shell unix

我的shell程序有问题(代码如下),我应该将文件从目录sorg复制到dest,但是如果文件存在于dest中,我应该复制到dest / duplicate,程序不起作用

#!/bin/sh

sorg=$1
dest=$2
path=$3

cd $sorg

for i in *.jpg
do
    #controllo se il file esiste nella destinazione
    if test -f "$dest/$i"
     then
        #il file esiste
         mv $i "$dest/duplicati"
    else
       #il file non esiste
       mv $i "$dest" 
    fi 

done

1 个答案:

答案 0 :(得分:1)

从shell中更改目录是不好的做法。如果您的输入参数不是绝对路径,那么您的脚本根本不起作用。

当前目录中包含inputoutput的示例:

sorg=input
dest=output

另外,您必须使用引号保护所有操作,否则如果文件名中包含空格字符,则会失败(根据我们的讨论,情况属实)

首先,您的脚本执行cd input。由于dest是相对的,因此它现在指向不存在的input/output

要么将你的参数转换为绝对(不是很好),要么修改以避免必须更改目录(最佳选项)

我更改了您的代码,因此不再需要更改目录。困难在于计算输入文件的基本名称以计算目的地名称。

我还添加了目录创建,因为如果duplicati目录不存在将是灾难性的:所有重复项都将移动到同一文件duplicati

(英文评论来自我:))

#!/bin/sh

sorg=$1
dest=$2
# this is not used, commenting out!
# path=$3

if [ ! -d "$dest/duplicati" ] ; then
   mkdir "$dest/duplicati"
   if [ $? != 0 ] ; then
      # cannot create duplicate dir: bail out
      exit 1
   fi
fi

# scan jpg files from source directory
for fpi in $sorg/*.jpg
do
    # compute basename from full source path
    i=$(basename "$fpi")
    #controllo se il file esiste nella destinazione
    if test -f "$dest/$i"
     then
        #il file esiste    
         echo duplicate: moving $fpi to $dest/duplicati/$i         
         mv "$fpi" "$dest/duplicati/$i"
    else
       #il file non esiste
        echo moving $fpi to "$dest/$i"      
       mv "$fpi" "$dest/$i" 
    fi 

done