Я пытаюсь создать bash-скрипт на основе входного файла (list.txt). Входной файл содержит список файлов с абсолютным путем. Выводом должен быть скрипт bash (move.sh), который перемещает файлы в другое место, сохраняет структуру папок, но перед этим немного изменяет имя целевой папки.
Пример файла ввода list.txt выглядит следующим образом:
/In/Folder_1/SomeFoldername1/somefilename_x.mp3
/In/Folder_2/SomeFoldername2/somefilename_y.mp3
/In/Folder_3/SomeFoldername3/somefilename_z.mp3
Выходной файл (move.sh) должен выглядеть следующим образом после создания:
mv "/In/Folder_1/SomeFoldername1/somefilename_x.mp3" /gain/Folder_1/
mv "/In/Folder_2/SomeFoldername2/somefilename_y.mp3" /gain/Folder_2/
mv "/In/Folder_3/SomeFoldername3/somefilename_z.mp3" /gain/Folder_3/
Структура папок должна быть сохранена, более или менее.
после выполнения созданного bash-скрипта (move.sh) результат должен выглядеть следующим образом:
/gain/Folder_1/somefilename_x.mp3
/gain/Folder_2/somefilename_y.mp3
/gain/Folder_3/somefilename_z.mp3
Что я сделал до сих пор.
1. создать список файлов с абсолютным путем
find /In/ -iname "*.mp3" -type f > /home/maars/mp3/list.txt
2. создать скрипт move.sh
cp -a /home/maars/mp3/list.txt /home/maars/mp3/move.sh
# read the list and split the absolute path into fields
while IFS= read -r line;do
fields=($(printf "%s" "$line"|cut -d'/' --output-delimiter=' ' -f1-))
done < /home/maars/mp3/move.sh
# add the target path based on variables at the end of the line
sed -i -E "s|\.mp3|\.mp3"\"" /gain/"${fields[1]}"/|g" /home/maars/mp3/move.sh
sed -i "s|/In/|mv "\""/In/|g" /home/maars/mp3/move.sh
Сценарий просто использует значение ${fields[1]}
, то есть Folder_1, и помещает его во все строки в конце. Вместо Папки_2 и Папки_3.
Текущий результат выглядит как
mv "/In/Folder_1/SomeFoldername1/somefilename_x.mp3" /gain/Folder_1/
mv "/In/Folder_2/SomeFoldername2/somefilename_y.mp3" /gain/Folder_1/
mv "/In/Folder_3/SomeFoldername3/somefilename_z.mp3" /gain/Folder_1/
rsync - не вариант, так как мне нужен полный контроль над перемещаемыми файлами.
Что я могу сделать лучше, чтобы решить эту проблему?
РЕДАКТИРОВАТЬ: @Socowi очень помог мне, указав мне в правильном направлении. После того, как я глубоко погрузился в мир регулярных выражений, я смог решить свои проблемы. Большое спасибо