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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн d88n

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

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

Оффлайн БТР

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

Оффлайн d88n

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

Оффлайн Azure

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

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3269
    • Просмотр профиля
Если вы посмотрите "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) [Выделить]
find /MY_DIRECTORY -name *.cpp -exec recode windows-1251 {} \;
По-моему нужно экранировать * или взять кавычки
Код: (bash) [Выделить]
find MY_DIRECTORY -name \*.cpp -exec recode windows-1251 {} \;
Код: (bash) [Выделить]
find MY_DIRECTORY -name "*.cpp" -exec recode windows-1251 {} \;
а вообще в рекомендуют исползоваь xargs.
А если пробелы будут? там ведь грабли есть)
http://stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs

Оффлайн Peter_I

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

Оффлайн Azure

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

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
find /MY_DIRECTORY -name *.cpp | xargs -I {} recode windows-1251 {}
Wars ~.o

 

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