Чтобы ответить на заглавный вопрос :, вы не использовали sudo
в этой команде.
Недостаток использования grep
заключается в том, что либо вам нужно разрешить регулярные выражения, чтобы можно было привязать совпадение шаблона к началу строки, либо вам нужно отключить регулярные выражения и надеяться, что каждое совпадение шаблона и цели имеет общий и неповторяющийся префикс -.
Проблема с регулярными выражениями заключается в том, что шаблон типа ^/mnt/one.two/
будет соответствовать строке /mnt/one/two/
. Проблема с фиксированными строками заключается в том, что /mnt/one/two/
может соответствовать /one/two/
.
Другой подход заключается в использовании awk
для сравнения пути к целевому каталогу с каждой строкой по очереди, гарантируя, что начало целевого каталога и начало шаблона совпадают. Предполагая, что у вас есть список каталогов вfile
:
dir="/mnt/Transfer/Downloads/Documents/Thesis/Drafts/images/"
awk -v dir="$dir" '$0 == substr(dir, 1, length($0))' file
И вывод для вашего примера
/mnt/Transfer/Downloads/Documents/Thesis/Drafts/
Когда
$ dir="/mnt/Transfer/Downloads/Documents/Thesis/Drafts/images/"
$ cat file
/mnt/Transfer/Downloads/Documents/ProjectProposal/
/mnt/Transfer/Downloads/Documents/ProjectDesign/
/mnt/Transfer/Downloads/Documents/Thesis/Drafts/
...
тогда, если вас интересует только наличие совпадения, и вам все равно, какая строка в файле соответствует:
if echo "$dir" | grep -q -f file; then
echo "a match exists in the file"
else
echo "no match"
fi