os x удалить косую черту из имени файла

os x удалить косую черту из имени файла

Привет, я хочу удалить все прямые слеши из всех моих файлов, но сделать это рекурсивно для каждого каталога в основном каталоге.

Как мне изменить этот скрипт, который работает не рекурсивно?

for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done

или лучше я хочу заменить только косую черту в именах файлов, но это для каждой подпапки в основной папке?

приветствие Макс

решение1

В слое BSD косая черта является разделителем пути. Когда вы встречаете имя файла с косой чертой, ядро ​​преобразует косую черту- /в двоеточие- :. Таким образом, имя файла в приложении Finder может выглядеть как , foo/barно в слое BSD оно выглядит как foo:bar.

Итак, чтобы пройти по дереву каталогов, используйте findдля поиска файлов с :в их имени. Затем используйте встроенный скрипт с -execdirдля удаления двоеточий (косых черт в приложении Finder) из имен файлов.

find . -type f -name '*:*' -execdir bash -c ' for file
    do
        echo mv -- "${file}" "${file//:}"
    done' sh {} \;

Это только перечислит mvкоманду и операнды. Если вы чувствуете, что вывод даст вам желаемые результаты, то удалите echo.

Связанный контент