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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скрипт  (Прочитано 997 раз)

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

Оффлайн dert1x

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Скрипт
« : 09 Ноября 2021, 14:26:34 »
У меня есть директории для обработки например Dir/ (Documents/Dir)
В ней есть некоторое кол-во файлов к примеру file.txt readme.txt text.txt (Dir/file.txt ; Dir/readme.txt ; Dir/text.txt)
Так в этой директории есть несколько вложенных директорий, в которых есть тоже файл и один из этих файлов называется так же как file.txt, но содержат разную информацию (Dir/Dir1/file.txt ; Dir/Dir2/copybook.txt)
У меня есть директория для результатов Results (Documents/Results)

Мне нужно скопировать все файлы из Dir в Results без повторения иерархии вложенных папок в Dir с учетом файлов с одноименным названием и без потери информации. В итоге в директории Results должно получиться 5 файлов (Results/file.txt ; Results/readme.txt ; Results/text.txt ; Results/copybook.txt ; Results/file.txt ) , но так как файлов с одинаковым именем в директории не может быть, нужно переименовать один из файлов, без потери информации внутри файла.

0 идей, помогите пожалуйста, думал сделать через цикл, который пробегается по всей директории Dir и сравнивает файлы, но не знают как реализовать

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7463
  • Luck Tales
    • Просмотр профиля
Re: Скрипт
« Ответ #1 : 09 Ноября 2021, 16:58:47 »
Приблизительно так
find /dir -type f -exec cp --backup=numbered {} /result/ \;

 
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн qpdb

  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
Re: Скрипт
« Ответ #2 : 09 Ноября 2021, 18:10:55 »
Приветствую dert1x!

Попробуйте «на кошках» вот это, может подойти…
QQ=(/tmp/$(date +%H%M%S)_cp);mkdir $QQ;find . -type f -iname "*.╳╳╳" -exec bash \
-c 'cp "$0" "`echo $0|sed -r "s:(.*)/:\1/$(date +%s%4N)∑¢∑_:;s:(.*)/.{8}:\1\/:"`"' \
{} \; 2>/dev/null;sleep 5;find . -type f -iname "*∑¢∑*" -exec mv -t $QQ  {} \; 2>/dev/null

Запускать из директории где лежат все искомые файлы; „ *.╳╳╳ ” вставить своё расширение.

Ко всем файлам будет добавлен уникальный префикс типа „275843∑¢∑_” и в файле вроде /tmp/100347_cp будут скопированы все файлы, ∑¢∑ потом можно подправить (удалить) командой renamre…

Данная команда не нарушит первоначальную структуру…

2021 Nov 09; 10:10 AM; Oakville, ON, Canada.

 

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