Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Можно ли рекурсивно скопировать все файлы из множества каталогов в один?  (Прочитано 2451 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Суть в следующем: имеется библиотека на семь гигабайт, содержащая с полтора десятка тысяч книг. Книги распределены по каталогам и подкаталогам, которых тоже несколько тысяч, в каждом - по несколько книг. Вопрос - можно ли скопировать рекурсивно, т.е. выдрать все эти книги в одни общий каталог?
« Последнее редактирование: 14 Май 2011, 13:10:04 от lion9 »

Оффлайн NXShock

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Как корявый вариант - в поиске вбить искать файлы по маске:
(Нажмите, чтобы показать/скрыть)
Затем выделить всё это добро и скопировать куда нужно.

Оффлайн lion9

  • Автор темы
  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Как корявый вариант - в поиске вбить искать файлы по маске:
(Нажмите, чтобы показать/скрыть)
Затем выделить всё это добро и скопировать куда нужно.

По маске не выйдет - там куча разных форматов. Попробую по поиску найти ВСЕ файлы *.* в заданном каталоге /home/library.


UPD

Не понимаю, как организовать поиск таким образом, чтобы получить на выходе не список файлов, а сами файлы, чтобы их скопировать. Кроме того, поиск через Double Commander выдаёт не только файлы, но и названия самих каталогов, find в терминале выдаёт список, от которого я вижу лишь самый низ.
« Последнее редактирование: 14 Май 2011, 13:41:34 от lion9 »

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Это точно надо делать через терминал, с помощью mv... Осталось вспомнить, как не выбрать папки, а только файлы в них...
Ubuntu 14.04 (Unity), MSI GE40

andrey_p

  • Гость
find <old-catalog> -type f -name '*' | xargs mv -t <new-catalog>
Или cp вместо mv, если нужно скопировать, а не перенести.

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
find <old-catalog> -type f -name '*' | xargs mv -t <new-catalog>
У find-a есть ещё полезная опция -exec, поэтому можно сделать что-то вроде:
find <old-catalog> -type f -name '*' -exec cp {} <new-catalog> \;

andrey_p

  • Гость
Угу... Старые грабли. Сколько файлов, столько раз будет создаваться новый процесс (команды cp или mv). Будет намного дольше.

Не рекомендуется при массовых операциях с файлами использовать команду exec в find.
« Последнее редактирование: 14 Май 2011, 15:33:05 от andrey_p »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Не рекомендуется при массовых операциях с файлами использовать команду exec в find.
Откуда такая информация?
« Последнее редактирование: 14 Май 2011, 15:14:23 от spk-ubuntu »

andrey_p

  • Гость
А самому попробовать: ;)

% rm -r /tmp/dir  && mkdir /tmp/dir
app@ubuntu ~
% time find /usr/share/man -type f -name '*' -exec cp {} /tmp/dir/ \; 2>/dev/null
0,33s user 2,23s system 8% cpu 29,063 total
app@ubuntu ~
% ls /tmp/dir/ | wc -l
6693
app@ubuntu ~
% rm -r /tmp/dir  && mkdir /tmp/dir
app@ubuntu ~
% time (find /usr/share/man -type f -name '*' | xargs cp -t /tmp/dir/) 2>/dev/null
0,05s user 0,31s system 96% cpu 0,373 total
app@ubuntu ~
% ls /tmp/dir/ | wc -l
6693

PS Это что за форумные шуточки?  :o rm -rf превратило в эрэм эрэф и не могу исправить...

PSS Надо же защита от эээ... советчиков. ))) rm -rf не пропускается, rm -r - пожалуйста.  :)
« Последнее редактирование: 14 Май 2011, 16:05:57 от andrey_p »

 

Страница сгенерирована за 0.184 секунд. Запросов: 22.