Вам придется внести некоторые изменения, но для работы с произвольными именами подумайте об использовании опции поиска GNU -print0
и т. Д.
find ~/$folder -name "*@*" -type f -print0 |
while read -d '^@' file
do
echo "<<$file>>"
done
(где отдельный байт, представленный как '^@
', фактически является NSC ASCII ('\ 0'; введите с помощью Control-V Control-Shift - @ ).
find ~/$folder -name "*@*" -type f -print0 |
while read -d '' file
do
echo "<<$file>>"
done
Пустая строка для разделителя означает «использовать нулевой байт, ASCII NUL, в качестве разделителя» и подходит для анализа вывода «find ... -print0
». (Спасибо Деннис Уильямсон для подсказки.)
Это позволяет вам читать любые произвольные имена. Возможно, вы должны использовать массив bash для хранения имен, но это подразумевает некоторые изменения далее в скрипте.
(Учитывая ответ на комментарий, о котором нужно беспокоиться только о пробелах, это может быть излишним, хотя использование read
для обработки строк с именами является ключевой частью операции, а использование массива, вероятно, сделает жизнь проще.)