LINUX.ORG.RU

Разложить файлы по папкам


0

1

Приветствую всех!
Помогите пожалуйста чайнику решить проблему:
Есть папка с текстовыми файлами. Имена отличаются сериями и нумерацией, например:

file1 01.txt
file1 02.txt
....
file1 67.txt
new one file 01.txt
new one file 08.txt
....
new one file 25.txt
new file 01.txt
new file 06.txt
....
new file 48.txt
и т.д
Помогите пожалуйста разложить их по папкам, соответствующим их именам, без учета нумерации.
Большое спасибо!


1. формируем список:

find . -type f | sed 's/[[:space:]]\{1,\}[[:digit:]]\{1,\}//g' | sort > names

2. Сортируем:

while read prefix do;
  mkdir "$prefix"
  mv ${prefix}* "$prefix"
done < names

Но идиотские пробелы в именах файлов могут быть проблемой.

Eddy_Em ☆☆☆☆☆
()
ls *.txt | sed 's/^\(.*\) \([^ ]*[0-9]*\.txt\)/mkdir -p "\1"; mv "\1 \2" "\1"/' | $SHELL
sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
Ответ на: комментарий от AITap

Чудненько!
Но почему-то удаляюся имена серий, остаются только номера.
Нельзя ли оставлять имена как есть?

serles
() автор топика
Ответ на: комментарий от serles

Тогда немного модифицируем регулярное выражение, чтобы сохранять пробелы, и добавим обе части в результирующее имя файла:

prename 's|^(.*?)(\s*)(\d+\.txt)|mkdir "$1";"$1/$1$2$3"|e' *
(не проверял)

AITap ★★★★★
()
Ответ на: комментарий от Eddy_Em

Но идиотские пробелы в именах файлов могут быть проблемой.

Только для идиотов, не осиливших шелл.

anonymous
()
Ответ на: комментарий от AITap

Уважаемый AITap!
Большущее Вам спасибо!
Вы меня очень выручили, всё работает прекрасно.

serles
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.