Предупреждение: Я ввел большинство этих команд непосредственно в моем браузере. Чтец протеста.
С zsh и zmv:
zmv -o -i -Qn '(**/)(*)(D)' '${1//\//-}$2'
Объяснение: шаблон **/*
соответствия все файлы в подкаталогах текущего каталога, рекурсивно (это не соответствует файлам в текущем каталоге, но они не должны быть переименованы). Первые две пары круглых скобок являются группами, которые могут быть отнесены в как $1
и $2
в тексте замены. Заключительная пара круглых скобок добавляет D
спецификатор шарика так, чтобы точечные файлы не были опущены. -o -i
средства передать -i
опция к mv
так, чтобы Вам предложили, если существующий файл был бы перезаписан.
Только с инструментами POSIX:
find . -depth -exec sh -c '
for source; do
case $source in ./*/*)
target="$(printf %sz "${source#./}" | tr / -)";
mv -i -- "$source" "${target%z}";;
esac
done
' _ {} +
Объяснение: case
оператор опускает текущий каталог и подкаталоги верхнего уровня текущего каталога. target
содержит имя исходного файла ($0
) с продвижением ./
разделенный и все наклонные черты, замененные тире, плюс финал z
. Финал z
есть ли в случае, если имя файла заканчивается новой строкой: иначе замена команды разделила бы его.
Если Ваш find
не поддерживает -exec … +
(OpenBSD, я смотрю на Вас):
find . -depth -exec sh -c '
case $0 in ./*/*)
target="$(printf %sz "${0#./}" | tr / -)";
mv -i -- "$0" "${target%z}";;
esac
' {} \;
С ударом (или ksh93), Вы не должны называть внешнюю команду для замены наклонных черт тире, можно использовать ksh93 расширение параметра со строковой заменяющей конструкцией ${VAR//STRING/REPLACEMENT}
:
find . -depth -exec bash -c '
for source; do
case $source in ./*/*)
source=${source#./}
target="${source//\//-}";
mv -i -- "$source" "$target";;
esac
done
' _ {} +
Вы добрались Address In Use
потому что Apache уже использует порт 80.
Если Вы хотите получить доступ к своему приложению Экспресса через порт 80, то необходимо завершить работу Apache и запустить приложение на порте 80.
Когда дело доходит до портов TCP (который порт 80), можно только связать один процесс с данным портом. Процесс в этом случае является Apache, таким образом, никакой другой процесс не может использовать его, в то время как Apache связывается с портом. Можно использовать команду netstat
с -t
переключатель для наблюдения используемых портов TCP.
$ netstat -tapn | grep :80
tcp 0 0 :::80 :::* LISTEN 7999/httpd
Здесь мы видим Apache, httpd
, использует порт. Также Вы видите идентификатор (7999) процесса для процесса в вышеупомянутом выводе также.