Простой Bash Script: изменение имен файлов для имитации каталогов

У меня есть 312 каталогов,

Ion_0001- Ion_0312. 

В каждом каталоге у меня есть файл light.out. Я хотел бы изменить имена файлов в каждом каталоге, например:

Ion_0001.out

Я считаю, что мне также нужно заменить /, чтобы мой вывод НЕ выглядел так:

Ion_0001/.out

Может ли кто-нибудь помочь мне с простым сценарием?

Вот что я попробовал:

#!/bin/bash
for dir in  */
do
cd $dir

for filename in *.out; do
mv $filename ${filename//$dir.out}
done
cd ..
done

Спасибо!

2 ответа

Решение

Не бесплатная служба кодирования, но она достаточно проста, чтобы о ней не стоило спорить...

Предполагая эту файловую структуру:

Ion_0001/
Ion_0001/light.out
Ion_0002/
Ion_0002/light.out
...

Запустите этот код в скрипте или просто в командной строке:

for i in Ion_0*
do
    mv "${i}/light.out" "${i}/${i}.out"
done

В результате в этой структуре:

Ion_0001/
Ion_0001/Ion_0001.out
Ion_0002/
Ion_0002/Ion_0002.out
...

Это то, что вы искали?

for dir in Ion*/; do 
    mv "${dir}light.out" "${dir}${dir%/}.out"
done

Конечный слеш в Ion*/ шаблон ограничивает результаты только каталогами, но косая черта будет присутствовать в значении переменной.

Другие вопросы по тегам