У меня есть скрипт shell / bash, который переименует какой-то файл внутри своей папки. У меня есть этот же файл в нескольких папках. Я хотел бы иметь один файл, который делает все папки.

#!/bin/bash
for name in *.png; do
    # remove everything after the last '-' including the dash
    # and add the '.png' extension back
    newname="${name%-*}.png"
    mv "$name" "$newname"
done

1 ответ1

2

Если вы просто хотите углубиться в один каталог, вам не нужна рекурсия и вам не нужен cd:

Эта модификация позволяет вашему сценарию принимать список каталогов в качестве аргументов и переименовывать файлы .png в этих каталогах.

#!/bin/bash
for dir in "$@"; do
    for name in "$dir"/*.png; do
        # . . .
    done
done

"$@" Распространяется на аргументы командной строки сценария. Сценарий ничего не будет делать без аргументов.

Аргументы имени каталога могут быть любым абсолютным путем (/path/to/dirx) или относительным путем (dirx , path/to/diry , . , .. , ../x/d1 и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .