用于同步图像的Shell脚本仅在for循环中运行一次
|
您会这么友善吗,请帮助我完成我的Shell脚本。下面的脚本将从源目录及其子目录中查找所有图片,并将它们以较低的分辨率转换为目标目录,包括与源目录相同的子目录结构。我需要补充一点,我是shell脚本的初学者。
所有变量(例如FILELIST,DIRNAME,TFILENAME)似乎都是具有正确内容的列表变量。
我的问题是,for循环仅运行一次,因此变量DSTPATH(应具有正确的目标路径)仅在第一行中正确,并且会影响变量TARGETFILE。
这对我来说很奇怪,因为我处于循环中。
#!/bin/sh
# must be with a /at the end
SRC=$1
DST=$2
FILELIST=`find $SRC -name \'*.[Jj][Pp][Gg]\'`
#for all files found
for SOURCEFILE in \"$FILELIST\"; do
# Get same subdirectory as in source
DIRNAME=`echo \"$SOURCEFILE\" | awk -F \'[^/]*$\' \'{print $1}\'`
SUBDIR=`echo \"$DIRNAME\" | awk -F \"$SRC\" \'{ if ( NF > 1 ) print $NF }\'`
# check if destination directory not exists, if so create it
# build destination directory name first
DSTPATH=${DST}\"$SUBDIR\"
if [ ! -d \"$DSTPATH\" ]
then
echo \"$DSTPATH will be created\"
# mkdir -p \"$DSTPATH\"
else
# normaly not needed
echo \"$DSTPATH exists already\"
fi
# build up target filename
TFILENAME=`echo \"$SOURCEFILE\" | awk -F \'/\' \'{ if ( NF > 1 ) print $NF }\'`
TBASENAME=`echo \"$TFILENAME\" | awk -F \'.\' \'{$NF=\"\"; sub(\"[.]$\",\"\"); print $1}\'`
TEXT=`echo \"$TFILENAME\" | awk -F \'.\' \'{print $NF}\'`
TARGETFILE=`echo \"$DSTPATH\"\"$TBASENAME\"\"_p1080.\"\"$TEXT\"`
# now the files can be converted with convert
# echo \"Converting $SOURCEFILE to $TARGETFILE\"
done
任何帮助都将非常可贵。
提前致谢
舍尼
P.S .:我使用\'awk \'进行的所有字符串操作,无论出于什么原因我都没有发现,dirname和basename也不适合我的脚本。
没有找到相关结果
已邀请:
3 个回复
糕泰灌
至:
看到这个:
根据基本名,目录名的问题,这应该起作用:
抵舵
请注意,在这段代码中,循环在子进程中运行(在\“ | \”之后)。 您可以从外部范围访问每个全局变量(的副本),但是更改它们(循环中的副本)将不会在外部范围(在\“ done \”之后)产生影响。
峨躬坎抬焚