Простой 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*/
шаблон ограничивает результаты только каталогами, но косая черта будет присутствовать в значении переменной.