用于文件处理的 Bash

用于文件处理的 Bash

我正在编写一个 bash 脚本,将所有图像移动到一个中央文件中。

我使用以下命令创建图像文件列表:

img_fil='/home/files/img_dump.txt'
locate -i image | grep \.jpg > "$img_fil"
locate -i image | grep \.jpeg >> "$img_fil"
locate -i image | grep \.gif >> "$img_fil"
locate -i image | grep \.tif >> "$img_fil"
locate -i image | grep \.png >> "$img_fil"

但是当我开始为此处理转储文件时,大多数路径都包含空格,因此这不起作用:

while read -r fline
do
   if [ ! -e "$fline" ]; then
      echo "F=> $fline"
      mv "$fline" "$img_dir"
   else
      fpath="$(dirname $fline)"
      fname="$(basename $fline)"
      echo "F=> $fname P=> $fpath"
   fi 
done

目录名和基本名总是在空白处解析,因此无法正确处理。

我该如何让它发挥作用?

答案1

fpath="$(dirname $fline)"
fname="$(basename $fline)"

在这里,您需要$fline在命令替换中引用。 (外部并不重要,因为它是在作业中。)所以:

fpath=$(dirname -- "$fline")

或者

fpath=${fline%/*}

dirname(尽管请注意/basename和参数扩展之间的细微差别,请参阅:目录名和基本名与参数扩展

答案2

$img_fil你在脚本中的什么地方使用?线不应该done是吗done < "$img_fil"

相关内容