Как использовать утилиту awk с утилитой find, при запуске через -exec?

Не могу понять как использовать awk с find, если запускать через -exec.
Пример:
# команда находит все файлы в папке и выводит только их названия
find ~/myfiles/ | awk -F"/" '{print $NF}'
это все работает!

но если я напишу так:
find ~/myfiles/ -exec awk -F"/" '{print $NF}' \;
то уже ничего не работает

вот так тоже не работает:
find ~/myfiles/ -exec echo {} \; | awk -F"/" '{print $NF}' \;

как быть?
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
Tolly
@Tolly Автор вопроса
find ~/myfiles -exec ЧТО-ТО ДЕЛАЮ \; -exec echo {} \; | sed 's|.*/\([^/]*\)$|\1|'

find ~/myfiles -exec ЧТО-ТО ДЕЛАЮ \; -exec basename {} \;
find ~/myfiles -exec ЧТО-ТО ДЕЛАЮ \; -exec echo "Файл -" `basename {}` \;

что-то не пашет последняя строка, только через цикл:
for i in `find ~/myfiles`
do
echo ">> " `basename $i`
done
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@immaculate
Программист-путешественник
Непонятно, чего вы хотите добиться. Если запустить awk с файлом в качестве аргумента, то данная команда работает:
find ~/myfiles -exec awk -F/ '{print $NF}' {} \;

Обратите внимание, что / в аргументах awk не нужно экранировать, хотя это и не ошибка — этот символ не имеет специального значения.
Ответ написан
Это всё замечательно, но не работает как надо потому что for разваливает имя файла на отдельные слова, если в нём есть пробелы.
У меня вот возникла нужда сделать скриптик, который пробегал бы по директории с поддиректориями и формировал общий список директорий и файлов типа:
==================
/home/user 2021-01-05 16384
/home/user/tmp 2021-02-11 16384
/home/user/tmp/1 2 3.txt 2021-04-20 2
==================
и я задолбался :( Вот, выродил:
for i in `find /home/user/*`;do ls -l --time-style=+%Y-%m-%d $i|awk '{print $7" "$6" "$5}';done
делает то, что надо, но разваливает имена с пробелами, превращая результат в кашу :( Как быть?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы