すべての画像を中央ファイルに移動する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"
?