Спасибо @Blitz и @Zoke за их ответы. Однако я создал более полное решение. Я изменил пакет unity-greeter, чтобы удалить точки, и я упаковал их в PPA.
Любой, кто хочет избавиться от точек, может использовать мой PPA. Вот инструкции:
Добавить PPA:sudo add-apt-repository ppa:scott.severance/lightdm
Выполнить sudo apt-get update Выполнить sudo apt-get upgrade Теперь точки исчезли. find -maxdepth 1 -name "libd*" | sed 's^\./^^' | locate -
Это решение наверняка не изящно, но оно работает для меня - sed 's^\./^^' просто удаляет «./» с начала каждой строки.
Если вы хотите использовать несколько команд в -exec, сделайте это следующим образом:
find -maxdepth 1 -name "libd*" -exec bash -c 'basename $1 | locate -' {} \;
Это работает для меня:
find -maxdepth 1 -type f -name "libd*" | sed -r 's/^\.\///' | xargs locate
sed -r 's/^\.\///': удаляет ./ из команды find
Я бы предложил либо
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
Поскольку вы хотите только искать файлы в реальной папке, вы также можете использовать
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
find -maxdepth 1 -name "libd*" | sed 's^\./^^' | locate -
Это решение наверняка не изящно, но оно работает для меня - sed 's^\./^^' просто удаляет «./» с начала каждой строки.
Если вы хотите использовать несколько команд в -exec, сделайте это следующим образом:
find -maxdepth 1 -name "libd*" -exec bash -c 'basename $1 | locate -' {} \;
Это работает для меня:
find -maxdepth 1 -type f -name "libd*" | sed -r 's/^\.\///' | xargs locate
sed -r 's/^\.\///': удаляет ./ из команды find
Я бы предложил либо
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
Поскольку вы хотите только искать файлы в реальной папке, вы также можете использовать
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