Быстрая-и-грязная острота Bash для переименования всех (globbed) файлов в текущем каталоге от filename.txt
кому: filename.txt-20120620
:
for f in *; do mv -- "$f" "$f-$(stat -c %Y "$f" | date +%Y%m%d)"; done
Инициативный компьютерный фанат Bash найдет, что некоторый пограничный случай повреждает его, я уверен.:)
Очевидно, это не делает желательных вещей как проверка, имеет ли файл уже что-то, что похоже на дату в конце.
Можно звонить exec
снова восстановить исходные дескрипторы. Необходимо будет сохранить их где-нибудь.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
В зарегистрированной части можно использовать исходные дескрипторы для одной команды путем перенаправления к дополнительным дескрипторам.
echo "30 seconds remaining" >&3
С другой стороны, можно поместить зарегистрированную часть сценария в составной команде и перенаправлении та составная команда. Это не работает, если Вы хотите использовать исходные дескрипторы в прерывании где-нибудь в той перенаправленной части.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
Используйте additinal fd 3 и 4 для stdout и stderr и просто перенаправьте 1 и 2 им в конце Вашего сценария:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
– Willem
28.06.2013, 12:24
Сначала необходимо проверить, есть ли у Вас tty вообще.
if tty -s; then
echo "Hello, World" > $(tty)
fi
tty
утилита. Можно перенаправить к специальному устройству /dev/tty
.
– Paused until further notice.
28.06.2013, 16:04
>&3
делает это мое предпочтительное решение. Спасибо (снова)! – Willem 03.07.2013, 23:16