Я попытался найти похожие вопросы, но не могу найти ничего такого, если бы извинялся, если это или подобное было задано раньше.OSX Bash: динамически переименовывать файлы из списка
Я пишу сценарий для чтения текстового списка имен файлов с ссылочным номером, затем просматривая вложенные папки для этих файлов, а затем изменяя имя, чтобы включить номер ссылки.
Текстовый файл будет выглядеть следующим образом (с разделителями табуляции и с заголовком):
"File Name (without Extension)" "Media Number"
"AK7A7964" "01017134"
"IMG_0026" "01017192"
"106491 Anenome" "01017206"
"CW1_9449" "01017243"
Я использую это, чтобы очистить файл \ т и «:
cat $file | sed "1 d" | tr "\\t" "," | sed 's/\"//g' > $cleanfile
Тогда чтение cleanfile в цикл while:
INPUT=$cleanfile
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read fname media; do
И создание нового названия, которое должно быть изменено до начала работы fi lename
newFileName="MA_${media}_"
Я тогда делать находку для каждого файла с таким именем, используя:
for found in $(find . -type f -name "$fname.*"); do
, но когда я пытаюсь изменить название, она изменяет только последний результат, если есть несколько файлов с тем же именем.
У меня, вероятно, отсутствует трюк при использовании sed
, но я не могу найти руководство, которое не уходит в глубоком конце довольно быстро!
[редактировать добавить]
То, что я делал после того, как последний do
был таков: Получение путь и базовое имя, создавая новое имя файла, а затем с помощью mv
, чтобы заменить его. Я был на самом деле просто делаю echo
так это неразрушающий
foundPath="${found%/*}"
foundFile="${found##*/}"
newFile=$newFileName$foundFile
newFilePath="${foundPath}/${newFile}"
mv $found $newFilePath
Если более чем одно вхождение любого файла (как будет), это было только mv
«ИНГ последней.
было бы полезно, если бы вы включили то, что вы делаете после того, как 'do' в ваших петель. –
Цикл не будет работать, если в нем есть пробел, например '106491 Anenome'. – Barmar
Как ваш цикл 'while read' использует', 'как разделитель между' fname' и 'media'? – Barmar