в этом репо:https://github.com/diederikdehaas/rtl8814AU
есть команда конвертировать в unix. 'исходная цитата'
Converted all line endings to unix.
The command used to perform that was: find. -path./.git -prune -o -name '*' -type f -print | xargs egrep -l $'\r'\$ | xargs perl -pi -e 's/\r\n/\n/g'
This finds all files recursively but excludes the '.git' directory. Then it checks whether it has dos line endings and if it does, converts them to unix. Without the ' | xargs perl...' part, it'll list the files with dos line endings.
Looks like Realtek is finally learning, only a couple of files this time :)
find / -name 'dork*' ! -name '*.zip'
Необходимо использовать два -name
теста. Один для сопоставления dork*
и один для сопоставления *.zip
. Второй из них следует инвертировать (на!
)так, чтобы найденные имена не совпадали с ним. Между тестами всегда есть неявное И.
Делаем видимыми неявные И:
find / -name 'dork*' -a ! -name '*.zip'
Также используется не -стандартный синтаксис GNU:
find / -name 'dork*' -and -not -name '*.zip'
Чтобы игнорировать возникающие при этом ошибки, перенаправьте стандартный поток ошибок на /dev/null
с 2>/dev/null
в конце.
С помощью GNU find
вместо этого вы можете не входить в каталоги, которые не доступны для чтения:
find / \( -type d -not -readable -prune \) -or \
\( -name 'dork*' -not -name '*.zip' -print \)
Вы неправильно понимаете синтаксис выражения find
. Я думаю, вы ожидаете, что тест -name
будет обрабатывать "dork*" -and !"zip"
как шаблон, который он ищет, но -name
ожидает одну строку шаблона , а не какое-то выражение. Способ find
разбирает это:(имя соответствуетdork*
)и (!zip
), при этом !zip
является отдельным подвыражением от первичного -name
. Но !zip
не является допустимым выражением, поэтому вы получите сообщение об ошибке.
Вам нужно нечто большее, например (имя соответствуетdork*
)и (имя не соответствует*.zip
).
find / -name "dork*" -and '!' -name "*.zip"
(-and
на самом деле не нужен; Я оставил это здесь для ясности.)
Здесь я сделал несколько других исправлений. :Шаблон *.zip
, потому что zip
соответствует только файлу с именем точно "zip".!
отделен пробелом, так что find
распознает его как отдельный элемент, а не часть чего-то еще, и я выделил его -в кавычках, поэтому, если вы используете команду в интерактивном режиме, оболочка не будет попробуйте интерпретировать это как отсылку к истории.
Кстати, что происходит с 2>&1 and
grep -iv "не" `? Если вы пытаетесь отфильтровать сообщения об ошибках и используете bash (, а не какую-либо другую оболочку ), вы можете использовать подстановку команд, чтобы не смешивать потоки вывода и ошибок :
find / -name "dork*" -and '!' -name "*.zip" 2> >(grep -iv "not" >&2)