Как задать несколько значений в одну переменную и после что бы они были по порядку в действии?
#Место
/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 шт):
Пусть в текущей директории у нас лежат файлы:
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
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 - аналогичен "'", добавляем экранированных кавычек что поможет избежать ошибок если в названии папки рабочего стола есть пробелы
Думаю тоже поучаствую:
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} ${_}/
Для вашей задачи удобней сделать цикл не по конкретным файлам а по названиям городов, как-то так:
comFILES=("Москва" "Мытыщи" "Тверь" "Чехов")
link="/Volumes/Внешний диск"
shopt -s nullglob
for item in "${comFILES}"; do
cp "$link/"*"$item"* "desktop/$item/"
done