LINUX.ORG.RU

[стыдно] Помогите составить скрипт


0

0

... который бы ходил рекурсивно по каталогу, для каждого найденного файла создавал директорию с тем же именем (без расширения, естественно) и перемещал найденный файл туда.
Короче, надо каждый файл в библиотеке засунуть в одноимённую директорию.
Это надо для чёртового freevo, который почему-то имена файлов показывает кракозябрами, а имена директорий - нормально. Зато позволяет запускать директории с единственным файлом внутри как сам файл.

★★★

man find

(хотя я на bash редко пишу, но тут он подойдёт)

SV0L0CH ()

find. а дальше в for - переименовал, создал, переместил.

melkor217 ★★★★★ ()

$ find dir -type f | xargs -I{} env F={} bash -c 'mkdir ${F%.*} && mv ${F} ${F%.*}'
Ну там кавычки сам расставь, чтоб имена с пробелами и прочим нормально обрабатывались

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

>Ну там кавычки сам расставь, чтоб имена с пробелами и прочим нормально обрабатывались
Как именно? Например, я ставлю вокруг переменных \" - вот такие штуки. echo вместо mkdir'а всё нормально кажет, а сам mkdir отрабатывает, как будто их и нет.

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

Пишите скрипт который берет имена файлов из агрументов комадной строки, помещаете его в исполняемый файл. Отдельно запускаете find с нужными опциями и получаете список файлов в /tmp/tmpfile. А потом по одному «кормите» файлы вашему скрипту, наверное, через xargs. Иначе, если файлов много, то find может обнаружить создаваемые скриптом каталоги и файлы в них.

#!/bin/bash

while : ; do
[ -z «$1» ] && break
echo «$1» # вместо этого всякий там mkdir, mv. Может ещё какие проверки
shift
done

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

>я ставлю вокруг переменных \" - вот такие штуки
И в этом твоя ошибка. Там должны быть просто кавычки. Их не надо экранировать (не надо ставить перед ними \ ), потому что внешние кавычки, которые вокруг всей команды, одинарные. Если бы были двойные - тогда да, надо было бы экранировать. И символ $ , кстати, тоже.

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

Да, действительно. Теперь всё работает.
Всем спасибо!

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

а теперь натрави его на файлы без расширения.

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