Итак, у меня есть папка с 2n файлами. n это файлы .foo, n из них .bar файлы. Я хочу скопировать имена файлов .foo (все они разные) в файлы .bar, упорядоченные в алфавитном порядке. Расширение должно оставаться таким, как есть.
Скажем, Вы имеете (a, b, c) .foo и (p, q, r) .bar:
ls
a.foo b.foo c.foo p.bar q.bar r.bar
Вы собираете foos и панели в переменных типа массив:
foos=(*.foo)
bars=(*.bar)
Размер массива является $ {#foos [*]}, индексы идут от 0 до len-1. Первый элемент является $ {foos [0]} или $ {панели [0]}.
for f in $(seq 0 $((${#foos[*]}-1)))
do
fool=${foos[$f]};
echo mv ${bars[$f]} ${fool%.foo%.bar}
mv ${bars[$f]} ${fool/.foo/.bar}
done
mv p.bar a.bar
mv q.bar b.bar
mv r.bar c.bar
Если Вам не нравится эхо, удалите его. Сценарий принимает количество соответствия файлов панели и нечто. Я не уверен, будет ли строка 3 и 4 всегда перечислять имена в алфавитном порядке - она сделала в моих тестах, но у меня нет записанной спецификации для этого.
Если файл будет содержать дополнительный ".foo", то как "a.foo-bork.foo" он не будет работать intendet, и он не санирован против пробелов в именах файлов или разрывах строки и т.п.. Но это могло бы сделать то, что Вы хотите.