Как отмечается в комментариях, конкретная проблема с вашим кодом заключается в том, что вам не хватает $
для расширения file
. Тем не менее, обработка вывода ls
или find
может столкнуться с проблемами, когда имена файлов содержат любой символ IFS
. Пробелы являются распространенным примером, но переводы строк приводят к путанице во многих попытках обработать пробелы.
Один из вариантов решения этой проблемы - использовать -exec
с find
и вызывать оболочку, поскольку вам нужны некоторые возможности оболочки для расширения параметров.
Здесь мы будем использовать sh -c
со строкой для запуска, которая является командой cmp
, и мы передадим, что sh
2 аргумента, первый - это заполнитель, это имя оболочки, а второй - имя файла. параметр:
find filesystem -type f -exec sh -c 'cmp "$1" "${1#filesystem}"' _ {} \;
Мы заключаем в кавычки переменные внутри sh -c
, и find
гарантирует, что {}
будет правильно передан как один аргумент.