Сzsh
:
autoload zmv # best in ~/.zshrc
zmv '(**/)(* *)' '$1${2// /_}'
Как и в вашем коде, он не переименовывает скрытые файлы. Он также не заглядывает в скрытые каталоги. Если вы хотите переименовать их, измените его на:
autoload zmv # best in ~/.zshrc
zmv '(**/)(* *)(#qD)' '$1${2// /_}'
bash
эквивалентно (, но без гарантий, обеспечиваемых zmv
, поэтому вы можете добавить опцию -i
кmv
)последней из них будет:
LC_ALL=C find. -depth -name '* *' -exec bash -c '
for file do
base=${file##*/}
mv -i -- "$file" "${file%/*}${base// /_}"
done' bash {} +
Нет простого эквивалента первому, так как нельзя комбинировать -prune
(, что было бы необходимо, чтобы не спускаться в скрытые каталоги )и -depth
. Однако функционально эквивалентный вариант может быть записан как:
LC_ALL=C find. -depth -name '* *' ! -path '*/.*' -exec bash -c '
for file do
base=${file##*/}
mv -i -- "$file" "${file%/*}${base// /_}"
done' bash {} +
Он спускался в скрытые каталоги, но не переименовывал там файлы.
У вас есть раскрытие фигурной скобки , а не регулярное выражение. Расширение фигурной скобки не работает внутри кавычек или при назначении/расширении переменной.
Что делает ваша первая команда:
apt install gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly
Что делает ваша вторая команда:
apt install "gstreamer1.0-plugins-{bad,base,good,ugly}"