Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?

Я кодирую Scala, и это соглашение – использовать двойные пробелы на уровень для идентификации. Но использование разных редакторов делает мои источники заполнены сочетанием пробелов и вкладок.

Я бы хотел реорганизовать все файлы (* .scala-файлы, на самом деле, но указать это необязательно) (в данном каталоге и всей базовой ветви FS (рекурсивно)) автоматически, заменив все вкладки на два пробела. Я считаю, что есть простой и красивый способ сделать это с помощью классических инструментов Unix / GNU, но мне не хватает опыта в этой области. Не могли бы вы помочь мне?

  • Файлы, затронутые командой
  • Преобразовать в командной строке файл sfd (fontforge) в ttf, otf, woff, svg
  • Получить номер предыдущей недели в bash
  • Как я могу закрыть сервер RHEL в 06:45 завтра утром?
  • Как найти каждый файл, который содержит заданную функцию?
  • Как я могу заставить мой терминал отрегулировать предыдущий выходной текст из прошлых команд? Возможно ли это?
  • распечатать, если следующая строка содержит
  • Получить список подкаталогов, содержащих файл, соответствующий строке
  • Преобразование между форматами нормализации Unicode в командной строке unix
  • Как проверить почту из командной строки?
  • Печать веб-страницы с помощью браузера через CLI
  • Ошибки орфографии в файле?
  • 2 Solutions collect form web for “Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?”

    Рекурсивно, используя expand (которое было сделано для этой цели): find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} + find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

    Я бы сделал это с помощью sed или perl (см. Ответ Sardathrion), потому что они поддерживают встроенное редактирование, но я хотел бы упомянуть о том, что все равно expand .

    EDIT: Это будет find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} + find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +

    Это должно сделать это:

     find . -type f -name '*.scala$' -exec sed -i 's/\t/ /g' {} + 

    Примечание: это не проверено.

    Linux и Unix - лучшая ОС в мире.