У меня есть папка, полные каталоги/файлы с пробелами в именах, и я хочу, чтобы скопировать все *.ttf
файлов в другой каталог для папок, кроме Consolas
и System Volume Information
, После this поста, я попробовал:Попытка Grep находку -print0 вызывает странное поведение
find ... -print0 | grep -v "System Volume Information" --null | grep -v "Consolas" --null | xargs -0 cp -t destination
По некоторым причинам, это приводит к Binary file (standard input) matches
сообщения от первой Grep. Использование объединить задать расширенные фильтры, я попытался:
find . -name '*.ttf' -print0 | egrep -v "(System Volume Information)|(Consolas)" --null | xargs...
Но в этом случае не будет задать расширенную распечатайте ничего к терминалу, хотя есть много других папки, кроме System Volume Information
и Consolas
. Когда я удалил все, кроме части команды find
, я получил один большой фрагмент текста без новых строк, из-за опции -print0
. Так как весь блок включал Consolas
, опустив его, я опускал все. Я подтвердил это, когда попытался сделать grep Arial
по результатам, и весь блок был распечатан.
Как предотвратить это поведение в grep?
Вы говорите 'find' для вывода списка с нулевым завершением, вы не говорите' grep' для чтения списка с нулевым завершением, вам нужны дополнительные '--null-data' для' greps' – BroSlow
@ BroSlow после нескольких часов поиска, большое спасибо за '--null-data' и не ошибаюсь' -Z' и '-z' !! –