@skyspirit

Почему не берутся пробелы в bash переменной?

Где ошибка?
for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
do
// извлекаем название найденного файла
WhatFileName=$(basename "$WhatFile"  )
echo "$WhatFileName"
// извлекаем папку найденного файла
WhatFolder=$(dirname "$WhatFile"  )
echo "$WhatFolder"
// извлекаем папку найденного файла
#echo WhatFolder $WhatFolder
#переименование
#файла
	if [ -n "$WhatFileName" ]; then
	WhatRenameFile=$( echo "$WhatFileName" |
	sed -f "$Renamer" )
		if [ "$WhatFileName" != "$WhatRenameFile" ]; then
			echo "переименовываем файл из "$WhatFileName" в "$WhatRenameFile""
		mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
	echo "пауза 2 секунды"
		sleep 2s
	else 
		echo "Файл соответствует правилам "$WhatFileName""
		fi
	#echo $WhatRenameFile
	fi
done


Спасибо
  • Вопрос задан
  • 360 просмотров
Решения вопроса 2
xotkot
@xotkot
хорошо есть и хорошо весьма
решение через IFS:
x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
do
IFS="$x"

п.с.
первоначальный(неверный) вариант
кавычки, в одном месте поменяй на одинарные а в другом добавь двойные
for WhatFile in "$(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r )";
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
файл "Название какого-то файла.mkv" $WhatFile возвращает в виде "Название" , отрезая всё, что есть после первого пробела

для этого вместо for WhatFile in $(...) лучше использовать конструкцию find ... -print0 | xargs -0 .... Т.е.
find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 -print0 | sort -zr | xargs -0 -I\{} bash -c '
WhatFile=\{}
// извлекаем название найденного файла
WhatFileName=$(basename "$WhatFile"  )
echo "$WhatFileName"
// извлекаем папку найденного файла
WhatFolder=$(dirname "$WhatFile"  )
echo "$WhatFolder"
// извлекаем папку найденного файла
#echo WhatFolder $WhatFolder
#переименование
#файла
  if [ -n "$WhatFileName" ]; then
  WhatRenameFile=$( echo "$WhatFileName" |
  sed -f "$Renamer" )
    if [ "$WhatFileName" != "$WhatRenameFile" ]; then
      echo "переименовываем файл из "$WhatFileName" в "$WhatRenameFile""
    mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
  echo "пауза 2 секунды"
    sleep 2s
  else 
    echo "Файл соответствует правилам "$WhatFileName""
    fi
  #echo $WhatRenameFile
  fi
'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы