Хорошо, я укушу ...
Если все, что вам нужно, это один вкладыш, вы всегда можете использовать команду AND_IF
&&
, чтобы превратить несколько строк в одну.
mv ./FOLDER ./NEW-NAME && mv ./NEW-NAME/SUB-FOLDER ./NEW-NAME/SUB-NEW-NAME
Это дает дополнительный эффект, что переименование подпапки будет происходить только в случае успешного переименования родительского элемента.
Однако не имеет ли больше смысла сначала перемещать подпапки?Позволяет назначить две переменные $f
для метки from и $t
для метки.Они могут идти в одну строку, но этот способ проще, когда мы хотим снова все изменить.
f=FOLDER; t=NEW-NAME;
mv "./$f/SUB-$f" "./$f/SUB-$t" && mv "./$f" "./$t"
Все остальные примеры предполагают, что установлены переменные from и to.
Давайте присвоим $p
родительскому поиску и $s
всем соответствующим подпапкам, чтобы убедиться, что они все существуют.Этот пример и все приведенные выше все еще являются чистыми решениями BASH.
p=(./*$f); [[ -d $p ]] && for s in $p/*$f; do mv "$s" "${s%$f}$t"; done && mv "$p" "${p%$f}$t"
Другой вариант, который следует рассмотреть, - это использование find
, как в этом одном вкладыше.
find . -d -type d -name "*$f" -execdir sh -c 'mv -- "$0" "${0%$1}$2"' "{}" "$f" "$t" \;
Это будет только переименовыватьсоответствующие папки, но он находит и находит совпадения во всех подпапках, используйте -maxdepth 2
для ограничения глубины обхода или добавьте -mindepth
для калибровки при использовании другой начальной точки.
nJoy!