Решение задачи:
arr=( string1 string2 string3 ) # array of strings
str=$( IFS='/'; printf '%s' "${arr[*]}" ) # concatenated with / as delimiter
$str
будет одной строкой string1/string2/string3
.
Решение мета-задачи:
Несколько файлов:
cp path/to/source/folder/* path/to/dest/folder
Обратите внимание, что *
соответствует файлу любого типа и что он не соответствует скрытым именам.Для скрытых имен используйте shopt -s dotglob
в bash
.Это не удастся, если есть тысячи файлов (список аргументов слишком длинный).
Файлы из нескольких или нескольких файлов, только не каталоги:
for pathaname in path/to/source/folder/*; do
[ ! -type d "$pathame" ] && cp "$pathname" path/to/dest/folder
done
или, с find
,
find path/to/source/folder -maxdepth 1 ! -type d -exec cp {} path/to/dest/folder \;
Разница между этими двумя заключается в том, что цикл оболочки откажется копировать символические ссылки, которые разрешаются в каталогах, а команда find
скопирует их.