v4567 писал: ↑18.04.2019 22:09
/dev/random подскажите что почитать по bash скриптингу на русском языке.
К сожалению, не знаю. На русском языке давно ничего не читаю, а bash изучал настолько давно, что уже и не помню, как именно.
v4567 писал: ↑18.04.2019 22:09
Кстати Вы прошлый раз не написали название массива, а сейчас написали название массива но убрали команду diff. Я проверил, без diff работает, то есть сравнивает и одинаковые имена записывает без повторений. Вот от тут я что то вообще не пойму как оно без diff работает???
Это была не команда. Это было название массива, я его переименовал из diff в dup, чтобы вы не путались.
v4567 писал: ↑18.04.2019 22:09
Вот из приведённой строчки кода вроде все команды знакомы, но вот так их все связать я не догадался.
find путь -type f -printf '%f\0' - найти файлы, вывести только их имена без путей, завершив каждое символом \0. Если использовать %P вместо %f, это будет означать вывод имён файлов с путями относительно каталога, в котором идёт поиск.
-z - во всех использованных командах, кроме find и readarray, означает использование \0 в качестве разделителя. Я уберу эту опциию из описания команд ниже, для краткости.
find ... | sort -u - отсортировать найденные имена и удалить дубликаты из списка.
( find ... | sort -u; find ... | sort -u ) - вывести 2 отсортированных списка, полученные из разных каталогов. Поскольку из каждого списка отдельно удалены дубликаты, то если что-то упоминается 2 раза, значит, находится в обоих списках.
( ... ) | sort - отсортировать этот двойной список, не удаляя дубликатов. Теперь дубликаты будут идти подряд.
... | uniq -d - вывести только идущие подряд дубликаты, каждый в единственном экземпляре.
readarray -d '' dup < <(...) - и прочитать эти дубликаты в массив dup.
-d '' означает использование \0 как разделителя.