Как получить только имена из команды find без пути

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

find trunk/messages/ -name "*.po" -printf '%fn'

аналогичную команду, чтобы присвоить этой переменной, например, "ресурс", чтобы использовать его позже.

правка: и если можно только имя без расширения.

28
задан wakeup
14.01.2023 20:01 Количество просмотров материала 3681
Распечатать страницу

3 ответа

использовать find trunk/messages/ -name "*.po" -exec basename {} .po \;

пример и пояснения:

создать несколько тестовых файлов:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, файлы найдены, включая путь.

для каждого результата execute basename, и полосы .po часть названия

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2
18
отвечен Hennes 2023-01-16 03:49

можно использовать -execdir параметр, который будет печатать файл без пути, например:

find . -name "*.po" -execdir echo {} ';'

файлы без расширений:

find . -name "*.txt" -execdir basename {} .po ';'

Примечание: так как это не POSIX, BSD find печать списка файлов, однако с помощью GNU find напечатает дополнительно ./.

посмотреть: почему команда GNU find-execdir ведет себя иначе, чем BSD find?

4
отвечен kenorb 2023-01-16 06:06

основан на команде, которую я нашла здесь: http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html

вы можете сделать это с помощью sed (который выполняется быстрее для меня, чем basename подход):

find trunk/messages/ -name "*.po" | sed 's!.*/!!' | sed 's!.po!!'
0
отвечен Anon567 2023-01-16 08:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх