Как заменить пробелы в именах файлов подчеркиванием [duplicate]

Я думаю, вы почти получили его. Вы можете использовать базовое имя «$ 0» до найти имя сценария внутри сценария и распечатать счетчик строк всего, кроме

#!/bin/bash
if [ $# -eq 0 ]
then
    for k in *
    do
        if [[ ! -d "$k" && "$k" != `basename "$0"` ]]
        then
            wc -l "$k"
        fi
    done
else
    for k in $*
    do
         wc -l "$k"
    done
fi

Я взял на себя смелость

  • Использование k вместо l (не рекомендуется для имен переменных, я почти уверен, но не могу найти ссылку (ее можно спутать с 1 , I ))
  • Использование 4 пробелов для отступа вместо 8. В конце концов, это, конечно, ваше решение, но я бы сказал, что 4 более читабельны, чем 8.
  • Цитирование ваших переменных . Настоятельно рекомендуется избегать разделения имен переменных пробелами.
  • Удаление ненужного echo , как указал @Serg.

РЕДАКТИРОВАТЬ Я добавил двойные скобки и тест для каталогов, чтобы игнорировать их, в условное выражение if .

1
06.11.2016, 18:00
2 ответа

В bash для всех файлов в папке.

for name in *; do mv "$name" "${name// /_}"; done

$ {name / pattern / replace} заменяет шаблон на replace ( Bash Parameter Expansion ). Если шаблон начинается с / (здесь шаблон / + Пробел ), он заменяет все вхождения. Затем mv переименовывает файл из name в новое имя с замененными пробелами.

7
27.01.2020, 23:11

С переименованием Perl:

rename 'y/ /_/' *
4
27.01.2020, 23:11

Теги

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