Як отримати лише імена з команди find без шляху


14

Я намагаюся отримати лише імена з результату пошуку, використовуючи пошук, але він завжди містить і каталоги. Як я можу надрукувати лише імена (або призначити змінну) за допомогою функції find

find trunk/messages/ -name "*.po" -printf '%f\n'

аналогічна команда, щоб призначити цю змінну, наприклад "ресурс", щоб згодом її використовувати.

EDIT: І по можливості лише назва, що виключає розширення.

Відповіді:


20

Використовуйте find trunk/messages/ -name "*.po" -exec basename {} .po \;

Приклад та пояснення:

Створіть кілька тестових файлів:

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

Гаразд, файли знайдені, включаючи шлях.

Для кожного результату виконайте basenameі зніміть .po частину імені

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Щиро дякую :). Чи можу я зняти лише подовжувач з бруса? Я маю на увазі: dir1 / po1.po та dir2 / po2.po чи можна їх отримати як dir1 / po1 та dir2 / po2?
пробудження

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck дякую. нарешті, мені потрібно отримати ім'я файлу без розширення та останню папку, де він знаходиться: наприклад: dir1 / subdir1 / subsubdir1 / po1.po та dir2 / subdir2 / subsubdir2 / po2.po слід встановити змінну на зразок: subsubdir1 / po1 subsubdir2 / po2 відповідно.
пробудження

@ user1754665 Хм, можливоfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes Яка мета зворотної косої риски перед відкриттям фігурного дужка в останньому find?
Утку

3

Ви можете використовувати -execdirпараметр, який буде друкувати файл без шляху, наприклад:

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

Файли без розширень:

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

Примітка: Оскільки це не POSIX, BSD findдрукує чисті імена файлів, однак за допомогою GNU findбуде надруковано додаткові ./.

Дивіться: Чому команда GNU find -execdir поводиться інакше, ніж BSD find?


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.