Я хотел бы развести файловую систему. В настоящее время мой bash-скрипт рекурсивно распечатывает файловую систему в файл (ls -l -R) и выводит ее с ожидаемым выводом.
Пример строки в этом файле: drw ---- 100000f3 00000400 0 ./foo/
Моя текущая команда diff - это diff "$ TEMP_LOG" "$ DIFF_FILE_OUT" --strip-trailing-cr --changed-group-format = '%>' --unchanged-group-format = '' >> "$ SubLog"
Как вы можете видеть, я игнорирую дополнительные строки в текущем выходном файле, я забочусь только о строках, которые соответствуют основному выводу.
Теперь у меня есть проблема, хотя некоторые файлы могут отличаться по размеру, или папка может даже иметь другое имя, но из-за ее расположения я знаю, какие права доступа она должна иметь.
Например:
Output:
------- 00000000 00000000 528 ./foo/bar.txt
Master:
------- 00000000 00000000 200 ./foo/bar.txt
Здесь различаются только размеры, и это не имеет значения, я хотел бы просто игнорировать определенные части различий, что-то вроде комментария.
Master:
------- 00000000 00000000 /*200*/ ./foo/bar.txt
-- ИЛИ ЖЕ --
Master:
d------ 00000000 00000000 /*10*/ ./foo//*123123*///*76456546*//bar.txt
Output:
d------ 00000000 00000000 0 ./foo/asd/sdf/bar.txt
И все-таки сделайте это правильно.
Возможно ли это даже с помощью diff, или мне придется написать собственный скрипт для него? Поскольку я довольно новичок в Cygwin, возможно, я использую совершенно неправильный инструмент, я рад любым предложениям.
Обновление 1:
Делая шаг назад, вот основная задача, которую я хочу достичь. Я хочу написать скрипт, который проверяет файловую систему, чтобы увидеть, правильно ли установлены разрешения на чтение / запись. Структура файловой системы находится под моим контролем, поэтому мне не нужно беспокоиться о ее слишком большом изменении. Иногда папки / файлы могут отсутствовать, но если они являются их разрешениями, необходимо проверить.
Например, предположим, что ниже приведен снимок текущей структуры файловой системы.
drw ./foo
drw ./foo/bar
-rw ./foow/bar/bar.txt
drw ./foo/baz
-rw ./foo/baz/baz.txt
И это то, что может диктовать структура файловой системы, то есть, если эти папки / файлы присутствуют, разрешения должны совпадать.
drw ./foo
drw ./foo/bar
-rw ./foo/bar/bar.txt
--- ./foo/bar/foobar.txt
drw ./foo/baz
-rw ./foo/baz/foobaz.txt
В этом случае с файловой системой все в порядке, поскольку все файлы соответствуют их ожидаемым значениям. Ситуация усложняется, как только некоторые папки могут иметь произвольное имя, только из-за их расположения я знаю, какими должны быть их разрешения. Предположим, что каталог ./foo/bar в приведенном выше примере может быть таким случаем, то есть вместо бара папка может иметь любое имя, но при этом соответствовать разрешениям -rw.
Это выглядит как очень сложная ситуация, и я даже не уверен, смогу ли я решить ее с помощью сценариев bash. Возможно, мне придется написать реальное заявление.
Обновление 2:
Обратите внимание, что я не могу запускать инструменты в файловой системе напрямую. Все, что у меня есть, - это файл, содержащий выходные данные команды 'ls -l' R ', которая производит выходные данные, как указано выше.
Я добавил дополнительный разбор вывода, вывод system / master теперь имеет формат
d------ ./path
drw---- ./path2