Найдите недостающие файлы между двумя каталогами (отсутствующие имена файлов, но не расширение) в Linux - PullRequest
0 голосов
/ 11 марта 2020

Скажите, что у меня есть dir1 /, у которого есть 1.a 2.a 3.a 5.a, и у dir2 / есть 1.b 2.b 3.b 4.b 5.b.

Интересно как я могу игнорировать расширение и найти отсутствующий файл (в данном случае 4.b).

Я предполагаю, что команда diff не работает, так как я не вижу соответствующего аргумента.

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете использовать команду basename для удаления базового имени:

find dir1 -type f -exec basename '{}' .a \; | sort > list1
find dir2 -type f -exec basename '{}' .b \; | sort > list2

Затем используйте diff list1 list2 для сравнения двух. Или, возможно, используйте comm вместо diff.

В качестве альтернативы базовому имени (которое требует явного указания .a и .b), вы также можете использовать sed, чтобы удалить все после последнего точка:

ls dir1 | sed -e 's,\.[^.]*$,,' | sort > list1
ls dir2 | sed -e 's,\.[^.]*$,,' | sort > list2
...