найти вместе с находкой

Этот ответ относится только к Ubuntu 11.04

Спасибо @Blitz и @Zoke за их ответы. Однако я создал более полное решение. Я изменил пакет unity-greeter, чтобы удалить точки, и я упаковал их в PPA.

Любой, кто хочет избавиться от точек, может использовать мой PPA. Вот инструкции:

Добавить PPA:
sudo add-apt-repository ppa:scott.severance/lightdm
Выполнить sudo apt-get update Выполнить sudo apt-get upgrade Теперь точки исчезли.
2
задан 17 September 2017 в 21:29

8 ответов

find -maxdepth 1 -name "libd*" | sed 's^\./^^' | locate -

Это решение наверняка не изящно, но оно работает для меня - sed 's^\./^^' просто удаляет «./» с начала каждой строки.

Если вы хотите использовать несколько команд в -exec, сделайте это следующим образом:

find -maxdepth 1 -name "libd*" -exec bash -c 'basename $1 | locate -' {} \;
0
ответ дан 18 July 2018 в 06:41

Это работает для меня:

find -maxdepth 1 -type f -name "libd*" | sed -r 's/^\.\///' | xargs locate

sed -r 's/^\.\///': удаляет ./ из команды find

0
ответ дан 18 July 2018 в 06:41

Я бы предложил либо

find . -maxdepth 1 -name "libd*" -exec sh -c 'for f; do locate "${f##*/}"; done' sh {} +

, либо

find . -maxdepth 1 -name "libd*" -printf '%f\0' | while read -rd '' f; do locate "$f"; done
0
ответ дан 18 July 2018 в 06:41

Поскольку вы хотите только искать файлы в реальной папке, вы также можете использовать

locate libd*

или что-то вроде следующего, но не имеет большого смысла.

ls libd* | xargs locate locate $(ls libd*)

Если вы хотите использовать find, вы также можете использовать * вместо ., но я также процитирую {}.

find * -maxdepth 1 -name "libd*" -exec locate "{}" ';'

Наконец, если вы хотите включить точку -файлы, а также скрытые файлы с glob.

shopt -s dotglob find * -maxdepth 1 -name "libd*" -exec locate "{}" ';' shopt -u dotglob
3
ответ дан 18 July 2018 в 06:41
find -maxdepth 1 -name "libd*" | sed 's^\./^^' | locate -

Это решение наверняка не изящно, но оно работает для меня - sed 's^\./^^' просто удаляет «./» с начала каждой строки.

Если вы хотите использовать несколько команд в -exec, сделайте это следующим образом:

find -maxdepth 1 -name "libd*" -exec bash -c 'basename $1 | locate -' {} \;
0
ответ дан 24 July 2018 в 18:39
  • 1
    Используйте cut -d/ -f2, это легче читать. – waltinator 18 September 2017 в 07:13
  • 2
    @waltinator Это вопрос вкуса, но использование другого разделителя - хорошая идея здесь - есть ^ для удовольствия! :) – dessert 18 September 2017 в 08:21

Это работает для меня:

find -maxdepth 1 -type f -name "libd*" | sed -r 's/^\.\///' | xargs locate

sed -r 's/^\.\///': удаляет ./ из команды find

0
ответ дан 24 July 2018 в 18:39

Я бы предложил либо

find . -maxdepth 1 -name "libd*" -exec sh -c 'for f; do locate "${f##*/}"; done' sh {} +

, либо

find . -maxdepth 1 -name "libd*" -printf '%f\0' | while read -rd '' f; do locate "$f"; done
0
ответ дан 24 July 2018 в 18:39
  • 1
    Я думаю, что "во время чтения" спасибо, очень полезен. Таким образом можно объединить многие команды. – jms 17 September 2017 в 20:31

Поскольку вы хотите только искать файлы в реальной папке, вы также можете использовать

locate libd*

или что-то вроде следующего, но не имеет большого смысла.

ls libd* | xargs locate locate $(ls libd*)

Если вы хотите использовать find, вы также можете использовать * вместо ., но я также процитирую {}.

find * -maxdepth 1 -name "libd*" -exec locate "{}" ';'

Наконец, если вы хотите включить точку -файлы, а также скрытые файлы с glob.

shopt -s dotglob find * -maxdepth 1 -name "libd*" -exec locate "{}" ';' shopt -u dotglob
3
ответ дан 24 July 2018 в 18:39
  • 1
    Мне нравится это ls libd* | xargs locate приятное комбо! – George Udosen 17 September 2017 в 20:45
  • 2
    почему "find -exec" вернуть все имена с ведущим символом ./& quot; тогда как "find * -exec" не? – jms 17 September 2017 в 21:31
  • 3
    find без начальной точки использует . по умолчанию. Если вы используете *, он будет расширяться из-за оболочки оболочки перед запуском команды find. Таким образом, поиск будет искать результаты расширенного шара. – Thomas 18 September 2017 в 09:42

Другие вопросы по тегам:

Похожие вопросы: