我的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
答案 0 :(得分:1)
从shell中更改目录是不好的做法。如果您的输入参数不是绝对路径,那么您的脚本根本不起作用。
当前目录中包含input
和output
的示例:
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