добавив параметр командной строки -r - PullRequest
3 голосов
/ 31 марта 2011

Я хочу добавить параметр командной строки -r, recurse, к этому коду:

for name in *.$1; do
    stripped_name="$(basename "$name" ".$1")"
    mv "$name.$1" "$name.$2"
done

Так что, если я введу "change -r txt doc", команда должна выполняться рекурсивно в любой подпапке. Например, если есть файл aaa.txt и каталог y, содержащий файлы y / bbb.txt и y / ccc.txt .... это должно привести к файлам aaa.doc, y / bbb.doc и y / ccc .doc.

Также, если я не поставлю "-r", он должен работать как обычно.

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

1 Ответ

1 голос
/ 31 марта 2011

Бьюсь об заклад, это далеко от идеала, но как насчет следующего? Он использует find, чтобы получить файлы для переименования, но если вы не предоставляете -r, он добавляет -maxdepth 1 к аргументам. Затем он использует команду rename(1) в системах на основе Debian (например, Ubuntu) для переименования соответствующих файлов. -print0 и xargs -0 обеспечивают отсутствие проблем с нечетными именами файлов, которые могут содержать символы новой строки и т. Д.

#!/bin/bash

if [ x"$1" = x-r ]
then
    FIND_OPTIONS=""
    shift
else
    FIND_OPTIONS="-maxdepth 1"
fi

FROM="$1"
TO="$2"

find . $FIND_OPTIONS -name '*.'$FROM -print0 | xargs -0 rename "s/\.$FROM/\.$TO/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...