Найти исполняемые имена файлов без пути

9

У меня есть папка со многими исполняемыми файлами, и я хочу опустить путь в результатах команды find. эта команда показывает файлы, которые я хочу видеть, но также перечисляет путь; Мне просто нужно имя файла.

find /opt/g09 -maxdepth 1 -executable

как я могу получить вывод find для отображения только имен файлов, а не полного пути?

    
задан j0h 01.07.2015 в 16:00
источник

5 ответов

10

Или используйте:

find /opt/g09 -maxdepth 1 -executable -printf "%f\n"

добавление флага -type f также работает здесь.

В руководстве find :

 %f     File's name with any leading directories removed (only the last element).

Этот ответ требует только, чтобы у вас есть GNU find , тогда как другие требуют других программ для управления вашими результатами.

    
ответ дан nixpower 01.07.2015 в 16:08
источник
6

Используйте basename :

find /opt/g09 -maxdepth 1 -executable -exec basename {} \;

От man basename :

Print NAME with any leading directory components removed.

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

find /opt/g09 -type f -maxdepth 1 -executable -exec basename {} \;
    
ответ дан heemayl 01.07.2015 в 16:06
3

Наиболее очевидным решением для меня является

(cd /opt/g09; find -maxdepth 1 -executable)

Поскольку вы запускаете подоболочку, вы остаетесь в том же каталоге. Преимущество этого метода в том, что вам не нужен синтаксический анализ. Недостатком является то, что вы начинаете подоболочку (вы не будете этого ощущать).

    
ответ дан Bernhard 01.07.2015 в 19:06
1

С awk , разделив путь на разделитель / , напечатайте последний раздел ( $NF ):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'
    
ответ дан Jacob Vlijm 01.07.2015 в 16:10
1

Используя комбинацию find и perl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$//'
    
ответ дан A.B. 01.07.2015 в 16:33