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

#Место

/Volumes/Внешний диск какой нибудь не важно.

#Имя файлов внутри около 90 штук

com.apple.Москва.plist
com.apple.Мытищи.plist
com.apple.Тверь.plist
com.apple.Чехов.plist

#Вопрос #Каким образом можно каждый файл который находится в этой папке поместить в ПАПКИ на рабочем столе с такими же названиями файлов? Москва Мытищи Тверь Чехов?

#Я образно представляю так:

comFILES=("Москва", "Мытыщи", "Тверь", "Чехов") #все названия около 90 файлов
link="/Volumes/Внешний диск"

#а после

for f in $link 
        Скопировать com.apple.$comFILES.plist рабочий стол по папкам c такими же именами которые уже там есть. то есть $comFILES.
    # то есть даже зрительно что бы переменная была одинаковым именем и там и там ~/Desktop $comFILES

Что бы имя из $comFILES копировалось в соответствующую такому же названию папке на рабочем столе.. $comFILES #Вроде не так сложно но оказалось очень сложно (((...

Либо наоборот с другой стороны пойти

`if` на рабочем столе есть папки с именами из списка `$comFILES`то из папки `$link` копируются файлы com.$comFILES.plist

Файл москва в папку москву итд


Ответы (4 шт):

Автор решения: Vadik

Пусть в текущей директории у нас лежат файлы:

com.apple.Москва.plist
com.apple.Мытищи.plist
com.apple.Тверь.plist

Запустим следующий скрипт:

for f in com.apple.*.plist; do
  filename="${f%.plist}"
  directory="${filename#com.apple.}"
  mkdir -p "$directory"
  cp "$f" "$directory"
done

После запуска этого скрипта в текущей директории будут созданы файлы:

Москва/com.apple.Москва.plist
Мытищи/com.apple.Мытищи.plist
Тверь/com.apple.Тверь.plist
→ Ссылка
Автор решения: Zt.
in=/tmp/test
out=$(systemd-path user-desktop)
ls "$in"/com.apple.*.plist |awk -v out="$out" -F. '{OUT="\x27"out"\x27/"$(NF-1);system("mkdir -p "OUT";cp -u "$0" "OUT)}'

in - путь к папке где лежат исходные файлы com.apple.Москва.plist ...

out - папка рабочего стола

\x27 - аналогичен "'", добавляем экранированных кавычек что поможет избежать ошибок если в названии папки рабочего стола есть пробелы

→ Ссылка
Автор решения: ipatev_nn

Думаю тоже поучаствую:

while read fileName; do
#создаем каталог, с ключом -p ошибка не будет возникать, если каталог существует
    mkdir -p /home/desktop/${fileName:10:-6}
#копируем файл в созданные каталог, точнее $_ это последний аргумент из предыдущей команды, в данном случае наш файл
    cp -n /mnt/volume3/${fileName} ${_}/
#Передаем список файлов в цикл
done< <(ls /mnt/volume3/)

Вопрос в том, возможно ли существование одноименного файла на рабочем столе?
Если да, то можно команду cp, попросить делать бекапы старых файлов

cp --backup=numbered -f /mnt/volume3/${fileName} ${_}/
→ Ссылка
Автор решения: Ivan

Для вашей задачи удобней сделать цикл не по конкретным файлам а по названиям городов, как-то так:

comFILES=("Москва" "Мытыщи" "Тверь" "Чехов")
link="/Volumes/Внешний диск"

shopt -s nullglob
for item in "${comFILES}"; do
    cp "$link/"*"$item"* "desktop/$item/"
done
→ Ссылка