Bash 图像处理

Bash 图像处理

全部,

好的!尝试将图像文件移动到中央图像文件夹。这是我的脚本:

img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
i='0'
while read -r fline
do
   fpath=$(dirname "$fline")"/"
   fname=$(basename "$fline")".$i"         
   nfile="$img_dir$fname"
   if [ ! -e "$nfile" ]; then
#      mv "$fline $img_dir$nfile"
      echo "NF=> $nfile"
   else
      ((i++))
#      mv "$fline $img_dir$nfile.$i"
      echo "F=> $fname P=> $fpath"
   fi 
done < ${img_fil}
exit

文件移动当前已被注释掉,直到我得到正确的结果或至少得到一个令人满意的结果。

存在重复项,我当前的脚本不会仅针对相同文件名的重复项增加计数器,而是针对每次重复项的出现增加计数器。

有没有更好的方法来做到这一点和/或者我可以创建一个子例程来在新图像目录中进行搜索以查找最新的增量号?

干杯

光学MR

答案1

您可以在脚本中使用循环:

nfile="$img_dir$fname"
while [ -e "$nfile" ]
do
  ((i++))
  fname=$(basename "$fline")".$i" 
  nfile="$img_dir$fname"
done

现在你有一个未使用的文件名

答案2

您可以使用通配符将它们加载到数组中并使用数组大小​​:

shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i=${#dups[@]}
((i++))

编号从 1 开始,因此当文件计数为 0 时,您仍然需要将其增加一次才能得到 1。nullglob需要进行设置,否则数组大小将为 1,如下所述:如何从文件名 glob 创建一个可能为空的数组?shopt -u nullglob则相反,即。它会取消设置nullglob.

这里有一个与其他符合模式的文件名有关的问题"$nfile".**会匹配任何东西,而不仅仅是数字,所以要注意。

整体看起来像这样:

img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
#i='0'
while read -r fline
do
   fpath=$(dirname "$fline")"/"
   fname=$(basename "$fline")".$i"         
   nfile="$img_dir$fname"
   if [ ! -e "$nfile" ]; then
      mv "$fline $img_dir$nfile"
      echo "NF=> $nfile"
   else
      shopt -s nullglob
      dups=("$nfile".*)
      shopt -u nullglob
      i="${#dups[@]}"
      ((i++))
      mv "$fline $img_dir$nfile.$i"
      echo "F=> $fname.$i P=> $fpath"
   fi 
done < "${img_fil}"
exit 

注意这条线

i='0'

被注释掉了。首先,因为在这种情况下不需要。其次,如果您使用另一种方法来解决此问题,请注意,如果您不重置它,则每次循环后的值i都会保持增加。while

.$i在这一行中为您添加了它,所以如果这不是您想要的,请将其删除:

echo "F=> $fname.$i P=> $fpath" 

相关内容