Рейтинг:0

Переместите изображения в отдельный каталог после чтения их имен из файла в bash

флаг us

Я пытаюсь прочитать имена изображений из текста файла, который rgb_train_ids.txt, а затем я перемещу изображения после прочтения их имен в новую папку, которая Тренироваться.

#!/бин/баш

для файла в $(cat rgb_train_ids.txt); делать 
     mv "$file.png" "Поезд"; 
сделано

Когда я выполняю приведенный выше скрипт bash, он перемещает только второе изображение. img_2 и показывает это:

mv: не может stat 'img_1'$'\r''.png': нет такого файла или каталога

Я заметил, что он всегда перемещает последнюю строку в тексте файла.
Я не знаю, в чем проблема, не могли бы вы мне помочь?

введите описание изображения здесь

Рейтинг:1
флаг hr

$'\r' указывает на то, что строки в вашем rgb_train_ids.txt иметь окончание строки в стиле DOS, состоящее из двухсимвольной последовательности CRLF. Linux ожидает, что файлы будут использовать только LF. Вы можете преобразовать файл с помощью dos2unix утилиту или удалить символы CR с помощью тр или же сед Например.

Кроме того, зацикливание строк с использованием для файла в $(cat rgb_train_ids.txt) это плохая практика - если строки содержат пробелы или другие специальные символы оболочки, произойдет сбой. Вам следует рассмотреть возможность использования пока вместо этого цикл:

в то время как IFS= читать -r файл; делать
  mv "$file.png" Поезд/
сделано < <(tr -d '\r' < rgb_train_ids.txt)

Отставание / на Тренироваться/ является мерой безопасности, которая приведет к мв команда для ошибки, если каталог Тренироваться не существует - вместо непреднамеренного переименования каждого файла. В качестве альтернативы вы можете использовать mv -t Поезд "$file.png" сделать это явным, что Тренироваться это целевой каталог.

Смотрите также

Вы также можете рассмотреть возможность использования xargs а не цикл оболочки:

tr -d '\r' < rgb_train_ids.txt | xargs -d '\n' mv -t Поезд
Abanoub Asaad avatar
флаг us
Большое спасибо, я очень ценю ваше время и усилия!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.