2014-09-22 2 views
0

Следующая команда поиска фильтрует файлы и каталоги, начиная с символа точки.найти команду обрезать только файлы, начинающиеся с точки (файлы фильтра, начинающиеся с точки)

find $PWD \(-name '.*' -prune \) -o -print 

Где в качестве добавления условие «-type f» не фильтрует файлы, начинающиеся с точки.

find $PWD \(-name '.*' -type f -prune \) -o -print # this does not work 

Как подрезать только файлы, начинающиеся с точки

EDIT 1: Разъяснение на «Не работает»

Списки команд файл, начиная с оператора точки. Позже выяснилось, что это была символическая ссылка на другой файл (который не начинается с точки). Пробовал использовать -L (следовать символическим ссылкам), как показано ниже, который по-прежнему перечисляет символический файл ссылки, начиная с точки.

find -L $PWD \(-name '.*' -type f -prune \) -o -print 
+0

Объяснение 'не работает'? Нет особых причин для '-prune', а не просто' -not name '. *' 'Если вы хотите только обрезать файлы точек, но ваша логика должна все же опускать точечные файлы (а не скрытые каталоги). – BroSlow

+0

Основываясь на этом редактировании, похоже на проблему XY. Возможно, стоит удалить этот вопрос и опубликовать новый (вероятно, лучше разместить на [unix stackexchange] (http://unix.stackexchange.com/)) о том, почему параметры поиска по-прежнему используются для символических имен с помощью '-L' on , Что-то вроде 'find '$ PWD"! \ (-type l -lname '. *' -o -type f -name '. *' \) ', вероятно, будет близок к работе, но он будет опускать символические ссылки, указывающие на файлы и каталоги, начиная с точки, поэтому, вероятно, не совсем то, что здесь нужно. – BroSlow

ответ

1

Вы, кажется, немного запутался о значении «чернослив»: -prune означает не опускаются в подкаталоге, так что это не имеет смысла с -type f.

+0

'Не имеет смысла' и' не работает' - это две разные вещи. Его команда должна опускать точечные файлы, просто не из-за '-prune'. – BroSlow

+0

Это работает, это просто, что смысл не ясен. Его команда из-за круглых скобок говорит: «печатать файлы, начинающиеся с точки или печатать что-нибудь еще», что в основном означает, что он будет печатать все. Но вопрос OP о том, как обрезать только файлы, начинающиеся с точки, также не ясен. Предполагая, что он хочет * печатать * только файлы, начинающиеся с точки, он может просто сделать: 'find $ PWD -name '. *' -type f'. – SukkoPera

+0

Не совсем. В левой части '-o' нет явного действия, поэтому он не будет предпринимать никаких действий, если файлы начинаются с точки. Если они этого не сделают, они распечатают их. Так логично, что это что-то вроде «найти файлы, которые начинаются с точки ИЛИ печатают файлы (а это не так)», который содержит постороннюю логику, но все равно должен делать то, что он хочет (по крайней мере, так, как я читаю вопрос). – BroSlow