powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / basename не работает
12 сообщений из 12, страница 1 из 1
basename не работает
    #38456911
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите, пож., кто сколько может..
нужно получить имя файла через basename. Имя файла c путями получаю из find. Покажу на примере имя в переменной..

itc@rx8640h$ tt=/test/my_usr/tmp_1/SEP_20130101.lst
itc@rx8640h$ echo $tt
/test/my_usr/tmp_1/SEP_20130101.lst
itc@rx8640h$
itc@rx8640h$ basename $tt
SEP_20130101.lst
itc@rx8640h$ echo $tt | awk '{ print $0 }'
/test/my_usr/tmp_1/SEP_20130101.lst
itc@rx8640h$
itc@rx8640h$ echo $tt | awk '{ print (basename $0) }'
/test/my_usr/tmp_1/SEP_20130101.lst
itc@rx8640h$

уверен, что-то с синтаксисом , но не могу найти в инете, как правильно написать..
заранее спасибо.
...
Рейтинг: 0 / 0
basename не работает
    #38456970
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
awk это отдельный язык программирования, он воспринимает ваш basename как переменную, и принтит ее пустую.
можно из awk вызвать команду которая выполнит системную команду, но в этом случае это слишком уже.

глупый вариант
echo $tt |basename `awk '{ print $0 }'`

хороший вариант
find -name '*.sh' -printf "%P\n"

find -name '*.sh' -exec basename {} \;
...
Рейтинг: 0 / 0
basename не работает
    #38456975
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так (не знаю, подойдет ли):
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
root@OpenWrt:~# tt=/test/my_usr/tmp_1/SEP_20130101.lst
root@OpenWrt:~# basename `echo $tt | awk '{ print $0 }'`
SEP_20130101.lst
root@OpenWrt:~# echo $tt | basename `awk '{ print $0 }'`
SEP_20130101.lst
#вместо `` можно использовать $()
root@OpenWrt:~# basename $(echo $tt | awk '{ print $0 }')
SEP_20130101.lst
root@OpenWrt:~# echo $tt | basename $(awk '{ print $0 }')
SEP_20130101.lst
root@OpenWrt:~#


RTFM
PS: а find может сразу и -exec command делать...
...
Рейтинг: 0 / 0
basename не работает
    #38457457
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задача скопировать файлы с определенной маской -

если каталог поиска не содержит "_" , то копируется нормально.
find /test/my_usr/tmp_1/ -name "*" -type f | awk '{if(substr($0,index($0, "_")+1) ~/^20131031/) print $0}' | xargs -i cp {} .
решить можно используя rindex. но у меня его почему-то нет.. поэтому хотел в IF вставить имя файла через basename, но как-то не выходит -

find /test/my_usr/tmp_1/ -name "*" -type f | awk '{if(substr((basename $(echo $0 | awk '{ print $0 }')), index($0, "_")+1) ~/^20131031/) print $0}'| head
...
Рейтинг: 0 / 0
basename не работает
    #38457463
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, в index-е $0 соответственно тоже через basename.. кароче, написанное месиво
сваливается с ошибкой :/
...
Рейтинг: 0 / 0
basename не работает
    #38458181
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понял что нужно, пример покажите

файнд умеет регулярные выражения

find -regex
...
Рейтинг: 0 / 0
basename не работает
    #38458377
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в каталоге /test/my_usr/tmp_1/ лежат файлы с именами типа PPP_2013010123_123.201301010111665.txt Нужно копировать файлы по маске, типа, после первого подчеркивания в имени файла строка начинается на блаблабла.. - if(substr($0,index($0, "_")+1) ~/^20131031/)
но не могу выдернуть имя файла в if.

частный случай, каталог без подчеркивания. команда ниже нормально работает -
find /test/usr/tmp/ -name "*" -type f | awk '{if(substr($0,index($0, "_")+1) ~ /^20130101/) print $0}' | xargs -i cp {} .
если в имени каталога есть подчеркивание, то по index выбирается не та подстрока. Вкрячить в if basename не получается.
...
Рейтинг: 0 / 0
basename не работает
    #38459721
olexande
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если "поиск" пустить через "цикл в цикле":
- Перебрать все каталоги и подкаталоги, среди которых:
- среди файлов каталога "при наличии подчеркивания" у файла или др. условии уже выполнить то, что требуется ...
...
Рейтинг: 0 / 0
basename не работает
    #38459854
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нее, это левой рукой правое ухо.. все должно быть элементарно, я так думаю..
...
Рейтинг: 0 / 0
basename не работает
    #38460030
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дык может сразу искать по маске и копировать? или там еще что? find /test/usr/tmp/ -name "<маска>" -type f -exec cp {} . \;
...
Рейтинг: 0 / 0
basename не работает
    #38460151
SVklim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
под маску *_20130101 может попась файл PPP_20130104123_123_201301010111665.txt

маска должна быть после первого подчеркивания.. Собственно то, чего я и не знаю как сделать
...
Рейтинг: 0 / 0
basename не работает
    #38460614
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторфайнд умеет регулярные выражения

find -regex


Код: powershell
1.
2.
3.
4.
5.
root@OpenWrt:/tmp# ls PPP*
PPP_20130101321_321_201301040111665.good
PPP_20130104123_123_201301010111665.bad
root@OpenWrt:/tmp# find . -regex "[^\_]*\_20130101.*" -type f
./PPP_20130101321_321_201301040111665.good
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / basename не работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]