Вы могли бы изменить дескрипторы файлов, присоединенные к тому процессу, но, в целом, делание так требует, чтобы использовались некоторые немного злые шутки. Целое понятие вполне приятно покрыто этим вопросом. Ли запущение программы как retty
преуспеет в Вашем случае, зависит от того, как строго процесс контролирует состояние своих собственных дескрипторов файлов.
find . -depth -type d -name doc -exec sh -c 'mv "${0}" "${0%/doc}/Doc"' {} \;
В zsh можно использовать zmv
функционируйте к массе - переименовывают файлы:
zmv '(**/)doc' '${1}Doc'
Если Вам назвали некаталоги doc
, удостоверьтесь, что не соответствовали им путем добавления спецификатора шарика:
zmv -Q '(**/)doc(/)' '${1}Doc'
Если Ваше намерение состоит в том, чтобы использовать для своей выгоды каталог, и Вы используете bash
4 + это должно сделать:
find . -type d -name doc -print0 \
| while read -rd $'\0' file; do
dname=$(dirname "$file")
fname=$(basename "$file")
mv "$file" "$dname"/"${fname^}"
done
Отметьте использование \0
гарантировать корректную обработку необычных имен файлов.
Поскольку jw013 указывает в комментариях ${var^}
не работает, как я ожидал. Я исправил ответ, чтобы разделить путь к каталогу и имени файла и применяться ^
оператор только к $fname
.
Btw, благодарит стремление добавить недостающий канал.
${var^}
расширение делает то, к чему Вы хотите его. var=./foo/bar/doc; echo ${var^}
дает ./foo/bar/doc
. ^
расширение только влияет на первый символ.
– jw013
25.07.2012, 15:51
mkdir -p dir1/doc/dir2
. В этом случае даже при том, что каталог документа не является последним подкаталогом (требование Marc), это переименовано.
– mzet
25.07.2012, 17:31
-name doc
, но если только листовые каталоги должны быть подобраны проверка это $dir
только содержит .
и ..
подкаталоги могли быть сделаны.
– Thor
25.07.2012, 17:48