Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как заставить команду выполняться ко всем вложенным файлам в папках?  (Прочитано 600 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн d88n

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
В ГЛАВНОЙ директории имеется много ПОДДИРЕКТОРИЙ с вложенными файлами одинакового расширения.
Я меняю кодировку всех файлов отдельной папки по отдельности командой:

recode windows-1251 *.cppНужно изменить команду так, чтобы была возможность менять расширения файлов в ПОДДИРЕКТОРИЯХ, находясь в ГЛАВНОЙ директории.

Оффлайн БТР

  • Заслуженный пользователь
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 5389
    • Просмотр профиля

Оффлайн d88n

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
find с опцией -exec.
Так не работает:
find /MY_DIRECTORY -name *.cpp -exec recode windows-1251 *.cpp
Напишите, пожалуйста, команду.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Код: Bash
  1. find /MY_DIRECTORY -name '*.cpp' -exec recode windows-1251 {} \;
« Последнее редактирование: 31 Март 2015, 16:16:38 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 2194
    • Просмотр профиля
Если вы посмотрите "man find", то там есть пример использования -exec.
В вашем случае, как мне кажется, надо так:
ind /MY_DIRECTORY -name *.cpp -exec recode windows-1251 '{}' \;а вообще в рекомендуют исползоваtь xargs.
Только / означает, что каталог находится в корне файловoй системы -
там же, где root и прочие системные.
« Последнее редактирование: 31 Март 2015, 14:08:53 от Peter_I »
Пётр.

Оффлайн accipiter

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Код: Bash
  1. find /MY_DIRECTORY -name *.cpp -exec recode windows-1251 {} \;
По-моему нужно экранировать * или взять кавычки
Код: Bash
  1. find MY_DIRECTORY -name \*.cpp -exec recode windows-1251 {} \;
Код: Bash
  1. find MY_DIRECTORY -name "*.cpp" -exec recode windows-1251 {} \;

а вообще в рекомендуют исползоваь xargs.
А если пробелы будут? там ведь грабли есть)
http://stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 2194
    • Просмотр профиля
Да, в шаблоне для find нужны "", я не заметил, а {} я и взял в '' на случай пробелов.
Пётр.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Для {} пробелы не страшны (в кавычки можно не брать), а вот в паттерне может произойти подстановка вместо «*» , если в текущей папке есть файлы с расширением срр
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
find /MY_DIRECTORY -name *.cpp | xargs -I {} recode windows-1251 {}
Нельзя друзья, дулу - AnrDaemon видите?
~.o

 

Страница сгенерирована за 0.135 секунд. Запросов: 24.