我正在编写一个 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"
?