Я хочу увидеть, что не поддерживается с помощью регулярных выражений. Список находится здесь: https://support.code42.com/CrashPlan/4/Troubleshoot/What_Is_Not_Backing_Up#Admin_Excludes

Я старался

$ cat | xargs -L 1 echo find /cygdrive/c/Users/Chloe -regex -name

И вставил список регулярных выражений, который выглядел отлично. Когда я убрал echo , он выдал ошибку

find: paths must precede expression: .*/(?:42|d{8,}).*/(?:cp|~).*

Я попробовал одну строку вручную, и получил

$ find /cygdrive/c/Users/Chloe -regex -name .*.part
find: paths must precede expression: .*.part

Я также пытался использовать цитаты

$ find /cygdrive/c/Users/Chloe -regex -name '.*.part'
find: paths must precede expression: .*.part

Я также пытался изменить порядок

$ find -regex -name '.*.part' /cygdrive/c/Users/Chloe
find: paths must precede expression: .*.part

Итак, как мне найти все файлы, которые соответствуют всем этим регулярным выражениям? Я знаю, что некоторые команды позволяют вам указывать @file в качестве аргумента, чтобы получить параметр командной строки из файла, но я не увидел этого на странице find man.

1 ответ1

2

Это сработало

$ cat | xargs -L 1 -d \\n find 2>/dev/null /cygdrive/c/Users/Chloe -regex
  • -L 1 означает обрабатывать только 1 аргумент за раз для каждой команды find и не объединять аргументы в одну гигантскую командную строку
  • -d \\n означает использование новой строки в качестве разделителя аргументов, поскольку некоторые из входных аргументов имеют пробелы. Вы должны использовать двойную обратную косую черту, чтобы она не интерпретировалась оболочкой немедленно.
  • 2>/dev/null предотвращает ошибки типа «невозможно прочитать каталог ...»`
  • -regex означает использование регулярного выражения для имени файла. Очевидно, -regex и -name являются взаимоисключающими, хотя раньше я использовал регулярные выражения с -name .

Просто вставьте список регулярных выражений и завершите вводом и ^D

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .