Как я могу переместить файлы на основе контента CSV?
Описание: зациклите сам CSV и извлеките поля имени файла и каталога, используя cut
.
Я понимаю, почему вы начали в том же направлении, что и вы; но вместо того, чтобы разбивать имя файла и каталог на отдельные файлы, вы можете зациклить сам файл CSV. Исходя из этого, и помещая несколько переменных, таких как номера полей и путь к файлу CSV, в переменные на случай, если они изменятся в какой-то момент, вы можете сделать что-то вроде следующего:
#!/bin/bash
# move_csv.sh - move XML files based on fields in a CSV
filename_field=3
destination_field=12
csvfile="/Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv"
while read csv_line; do
mv "`echo $csv_line | cut -d',' -f$filename_field`" "`echo $csv_line | cut -d',' -f$destination_field`"
# eg mv "BuyingTheView_SunsetCondoToronto_192543_SLING.xml" "3_5_17"
done < $csvfile
(немного быстрый и грязный; вероятно, есть более идиоматические способы извлечения полей из строки для mv
, чем использование двух отдельных подпроцессов и вызовов cut
, но это по крайней мере работает в моем быстром тесте)
Пример «вывода» (на основе составленных данных, схожих по формату с тем, что вы имеете)
mv "BuyingTheView_SunsetCondoToronto_192543_SLING.xml" "3_5_17"
mv "BuyingTheView_SunriseCondoToronto_192544_SLING.xml" "3_5_18"
mv "BuyingTheView_LakeviewCondoToronto_192545_SLING.xml" "3_5_18"
mv "BuyingTheView_SunsetCondoVancouver_192546_SLING.xml" "3_5_19"
mv "BuyingTheView_SunsetCondoOttawa_192547_SLING.xml" "3_5_20"
mv "BuyingTheView_SunsetApartmentMontreal_192548_SLING.xml" "3_5_20"
(Это на самом деле не вывод; это команды mv
, которые будут выполняться, когда скрипт просматривает CSV.)
Внимание: обратите внимание на каталог, в котором работает этот скрипт! Предполагается, что файлы XML существуют в рабочем каталоге (из которого выполняется скрипт), а подкаталоги уже существуют. Если это не так, добавление cd
в правильный рабочий каталог или использование базового каталога для добавления путей в команду mv
относительно тривиально.