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

Я хочу взять все файлы из текущего каталога и дать им для "расположений", чтобы проверить, в другом месте ли они. Таким образом, я запустил с

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

Но это не работает, потому что находят возвраты именами в форме как "./libdrm.so" и располагаются, не работает с ведущей точкой. Таким образом, я думал, располагаются,-b должен помочь:

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

К сожалению, найдите,-b./libdrm.so не работает, я рассматриваю это как ошибку. Таким образом, я попробовал его базовым именем:

find -maxdepth 1 -type f -name "libd*" -exec locate \`basename {}\` ';'

Это не работает также, потому что 'базовое имя {}' разрешено сначала, и результат "-должностное лицо располагается '{}'''";.

Какая-либо идея, как я могу передать, "определяет местоположение 'базового имени {}'" должностному лицу?

2
задан 17 September 2017 в 21:29

4 ответа

Так как Вы только хотите искать файлы в фактической папке, Вы также могли использовать

locate libd*

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

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

, Если бы Вы хотите использовать, находят, Вы также могли бы использовать * вместо ., но я также заключил бы в кавычки {}.

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

Наконец, если Вы хотите включать точечные файлы, иначе скрытые файлы с шариком.

shopt -s dotglob
find * -maxdepth 1 -name "libd*" -exec locate "{}" ';'
shopt -u dotglob
2
ответ дан 2 December 2019 в 03:36

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

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
ответ дан 2 December 2019 в 03:36

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

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

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

0
ответ дан 2 December 2019 в 03:36
find -maxdepth 1 -name "libd*" | sed 's^\./^^' | locate -

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

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

find -maxdepth 1 -name "libd*" -exec bash -c 'basename $1 | locate -' {} \;
0
ответ дан 2 December 2019 в 03:36

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

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