ファイル処理のための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%/*}

dirnamebasename(/とパラメータ拡張の微妙な違いに注意してください。以下を参照してください。ディレクトリ名、デフォルト名、およびパラメータ拡張)

答え2

$img_filスクリプトのどこで使用しますか?ラインではないはずdoneですかdone < "$img_fil"

関連情報