Если файлы точно такие же, то их md5sum
s будут точно такими же, поэтому вы можете использовать:
find A/ B/ -type f -exec md5sum {} + | sort | uniq -w32 -D
md5sum всегда точно 128 бит (или 16 байтов или 32 шестнадцатеричных цифры) long, а вывод программы md5sum
использует шестнадцатеричные цифры. Поэтому мы используем параметр -w32
в команде uniq
, чтобы сравнивать только первые 32 символа в каждой строке.
Это напечатает все файлы с неуникальной md5sum. т.е. дубликаты.
ПРИМЕЧАНИЕ: при этом будут обнаружены повторяющиеся файлы независимо от того, где они находятся в A / или B / - поэтому, если / A / subdir1 / file
и A / subdir2 / otherfile
являются то же самое, они все равно будут печататься. Если дубликатов несколько, все они будут напечатаны.
Вы можете удалить md5sums из вывода, подключив, например, к awk '{print $ 2}'
или с помощью cut
или sed
и т. Д. I Я оставил их в выводе, потому что они являются полезным ключом для ассоциативного массива (также известного как «хэш») в awk
или perl
и т. д. для дальнейшей обработки.
Это, вероятно, окончание строк в стиле Windows -, которое нарушает его. Вот как выглядит файл, сохраненный с окончаниями строк Windows, но прочитанный в стиле Unix:
#!/bin/sh^M
^M
echo "hello world"^M
При толковании шебанга (#! ), exec
увидит дополнительный возврат каретки (, обозначенный как CR
, \r
, ^M
), и не найдет/bin/sh^M
:
$ exec./setup.sh
bash: setup.sh: /bin/sh^M: bad interpreter: No such file or directory
Сохраните файл с окончаниями строк в стиле Unix -. В Windows достойные текстовые редакторы (Sublime Text, Notepad++, любая IDE и т. д. )должны уметь это делать. Существует также простой инструмент командной строки -под названием dos2unix, который делает именно то, что вы от него ожидаете.
В изображении Alpine используется busybox
, а в busybox нет оболочки, так как на самом деле он не предназначен для людей.
Для информации замените
CMD ["/setup.sh"]
по:
CMD /bin/busybox ls -al /bin
Вы получаете:
lrwxrwxrwx 1 root root 12 Jan 9 19:37 ash -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 base64 -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 bbconfig -> /bin/busybox
-rwxr-xr-x 1 root root 805024 Dec 12 10:42 busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 cat -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 chgrp -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 chmod -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 chown -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 conspy -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 cp -> /bin/busybox
[... snip...]
lrwxrwxrwx 1 root root 12 Jan 9 19:37 tar -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 touch -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 true -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 umount -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 uname -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 usleep -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 watch -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jan 9 19:37 zcat -> /bin/busybox
Кроме того, если вы посмотрите на /lib
таким же образом, вы обнаружите, что обычных библиотек там нет, поскольку busybox
использует musl
вместо glibc
.
Как правило, все, что делается в вашем setup.sh
, все равно должно выполняться с RUN
инструкциями в Dockerfile?
PS :Кстати,
standard_init_linux.go:195: exec user process caused "no such file or directory"
означает, что либо исполняемый файл не найден, либо не найдена одна из необходимых для него библиотек, что сильно затрудняет отладку Dockerfile.
Следует использовать окончание строк в стиле Unix -вместо Windows. Эта проблема возникает и у меня в Windows 10.
Вы должны выполнить следующую команду перед клонированием репозитория:
git config --global core.autocrlf false
Затем клонируйте репозиторий и продолжайте.