Как выполнить команду для файлов с пробелами в них?

Я имею дело с устаревшей кодовой базой, где мы пытаемся преобразовать все файлы jpeg/png в формат webp с помощью команды cwebp. К сожалению, многие файлы изображений были сохранены с пробелами в имени. Пример: i am poorly named.jpg

Таким образом, при запуске следующего сценария bash для поиска всех jpeg-файлов в каталоге, прокрутки и преобразования их слова, разделенные пробелами, обрабатываются как другой файл, поэтому изображение никогда не преобразуется. Мы не хотим удалять пробелы, а просто создаем файл webp с точно таким же именем.

files=$(find ./ -type f -name  "*.jpg")
for jpg in $files
do
  webp="${jpg/%jpg/webp}";
  if [ ! -f $webp ]; then
    echo "The webp version does not exist";
    cwebp -q 80 "$jpg" -o "$webp";
  fi
done

Я пытался разместить jpg=$(printf '%q' "$jpg") сразу после do в приведенном выше коде, а также другие вещи.

Я ожидаю, что i am poorly named.webp будет создан, если файл i am poorly named.jpg существует.


person SavSamoylov    schedule 09.05.2019    source источник
comment
двойная кавычка webp в if [ ! -f $webp]; тогда`   -  person P....    schedule 10.05.2019
comment
Этот дубликат охватывает ваш вопрос? stackoverflow.com/q/23356779/3266847 (кроме того, на что указывает PS.)   -  person Benjamin W.    schedule 10.05.2019


Ответы (1)


Но нет реальной причины хранить все имена файлов. Итак, альтернатива:

find ./ -type f -name  "*.jpg" | while read jpg
do 
....

Но это работает только в том случае, если имя файла не содержит перевода строки. Для файлов с переводом строки есть другие решения. Спросите об этом, если это необходимо.

person Wiimm    schedule 09.05.2019
comment
Сохранение или зацикливание напрямую - это дубликат в любом случае. Пожалуйста, отмечайте точные дубликаты вместо того, чтобы отвечать на них. - person Socowi; 10.05.2019
comment
@Wiimm Дубликат в сторону. Спасибо! - person SavSamoylov; 10.05.2019