Задать вопрос
@skyspirit

Как разобрать массив?

Всем привет. Задача: сравнить 2 массива файлов, разложенные по папкам, если есть 100% совпадение, то из папки А переместить все файлы в папку В, где было найдено это совпадение.
массив первый, содержит папки А find ./Downloads -type f -iname "*.mkv"
массив второй, содержит папки B find ./Serials -type f -iname "*.mkv"

вот так сейчас я беру и сортирую файлы фильмов, но тут всё просто

#!/bin/bash
#зрим в корень
cd /
#перемещаем фильмы
find /volume1/Geroev_Avenue_18/Downloads -maxdepth 1 -type f -iname "*.mkv" -exec sh -c 'x="{}"; mv "$x" /volume1/Geroev_Avenue_18/Shared_Videos/Films' \;
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега Linux
ну смотри тут несколко вариантов
тут уже разбирали сравнине массивов.
Как сравнить два массива в bash?
Тут конечно нужны вводные данные, но опять же если это очень большое количество файлов то может быть ту мени аргументс и тд, в общем все равно не шибко быстрое решение.
НО логика такая.
1. создамем два массива.
2. в отдельную переменную сохраняем только название файла из первого массива.
3. создаем цикл перебераем этот файл, в массиве два, если соответствие находится то копируем его в полный путь к этому файлу.

2 вариант более костыльный но тоже имеет место быть
ты не используешь второй массив а просто каждый раз запускаешь 2 файнд уже с точным вхождением. find ./Serials -type f -iname "1110101.mkv"
просо

вот как-то так, да в таком варианте ты каждый раз будеш пускать по кругу файнд, но он с заданым конкрктным файлом и глубина невелкая, да и как я понял тебе не сильно нужна производительность.
Но в таком варианте ты поймешь что нужно делать без привлечение создания методов и двух массивов.
А главное нет ограничений на размер этих массивов.
#!/bin/sh
MASSIV_1=$(find /volume1/Geroev_Avenue_18/Downloads -maxdepth 1 -type f -iname "*.mkv") 


for ELEMENT in $MASSIV_1_FILMAME
    do

find ./Serials -type f -iname "$MASSIV_1_FILMAME -exec cp {} $MASSIV_1_DIR \;"

               fi

код на вскидку писал, дабы было понятно смысл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы