Дублируйте записи результатов с помощью команды поиска
Почему я получаю почти повторяющиеся записи (начиная с начальной точки или без нее) следующей командой, пожалуйста:
find . * -type f | grep '082235'
./Takeout-1/Google Photos/2017-12-07/20171207_082235.jpg.json
./Takeout-2/Google Photos/2017-12-07/20171207_082235.jpg
Takeout-1/Google Photos/2017-12-07/20171207_082235.jpg.json
Takeout-2/Google Photos/2017-12-07/20171207_082235.jpg
Есть ли твик / опция с find, чтобы избавиться от каждого дубликата?
2 ответа
find
команда может принимать ноль или более начальных точек, т. е. файлы или каталоги, в подкаталогах которых будет производиться поиск. Начальными точками также могут быть глобусы, которые будет расширяться оболочкой, такие как *
, который расширяется до списка всех не скрытых файлов и каталогов в текущем каталоге. Поиск проходит последовательно через свои начальные точки, поэтому он может выводить повторяющиеся файлы и / или каталоги, если файлы, доступные через различные начальные точки, перекрываются.
Наиболее тривиальным примером является то, что если вы находитесь в каталоге, содержащем файл foo
,
$ find foo foo
сгенерирует следующий вывод:
foo
foo
Запустив команду find . *
вы предоставляете в качестве отправных точек: во-первых, текущий каталог, .
; и во-вторых, все не скрытые файлы в этом каталоге. Это естественно создаст дублированные результаты: каждый обычный файл найден с .
в качестве отправной точки, которая не является скрытым файлом на верхнем уровне (т.е. ./.bar
файлы) и не содержится в скрытом каталоге на верхнем уровне (т.е. ./.baz/
каталоги) также появятся во второй части списка без ведущих ./
,
Вы, вероятно, просто хотите бежать
$ find . -type f
Обратите внимание, что если вы работали find . *
не выбирая обычные файлы с -type f
при условии, что существует элемент, не обязательно включающий скрытые файлы или каталоги, которые появляются только один раз: .
запись.
Вопрос в том, как вы используете find . *
, Сказать, что это фактически означает поиск в текущем каталоге (который рекурсивен, поэтому включает в себя все в нем), а затем также указать, что искать все в нем снова по отдельности. использование find .
или же find *
вместо. (Обратите внимание, что последний будет пропускать файлы в скрытых каталогах.)