Сначала создайте каталог /mnt/cdrom
:
mkdir -p /mnt/cdrom
Затем смонтируйте iso -образ с абсолютным путем к образу , например /home/user/R2018a_glnxa64_dvd1.iso
вместо простоR2018a_glnxa64_dvd1.iso
:
sudo mount -o loop /home/user/R2018a_glnxa64_dvd1.iso /mnt/cdrom
Если каталог /mnt/cdrom
существует, получите дополнительную информацию о вашем образе iso -:
file R2018a_glnxa64_dvd1.iso
и попробуйте смонтировать с явным типом файловой системы, например:
sudo mount -o loop -t iso9660 /home/user/R2018a_glnxa64_dvd1.iso /mnt/cdrom
Дополнительно прочитайте мой ответ на Askubuntu , возможно, ваш образ имеет загрузочный сектор, затем смонтируйте его с параметром offset
, который должен быть рассчитан в первую очередь.
Вы столкнулись с одной из причин, по которой рекомендуется(почти )всегда заключать переменные оболочки в кавычки .
В вашем случае, поскольку вы назначаете переменной оболочки fichier
имя файла, содержащее пробелы, оболочка будет выполнять разбиение слов, когда вы используете эту переменную «как есть», то есть так же, как $fichier
. Это означает, что каталог Job offers etc
в качестве аргумента для mv
будет интерпретироваться как попытка переместить три файла Job
, offers
и etc
в целевой каталогJob_offers_etc
(1).
Чтобы избежать этой проблемы, заключите ссылку на переменную в двойные -кавычки, как в "$fichier"
.
(1)Это действительно может быть опасно; в некоторых настройках, если целевой каталог не существует, команда может привести к переименованию трех файлов с одним и тем же именем, эффективно перезаписывая первые два третьим.
Из-за комбинации find
и sh -c
и необходимости заключать переменные в кавычки, может быть проще использовать цикл for
.
for file in *\ *
do
newfile=$(echo "$file" | tr ' ' _)
mv -i "$file" "$newfile"
done
Если у вас уже установлена утилита perl rename, File ::Rename , это несложно. Если у вас его еще нет, вам следует установить его -это делает трудные операции массового -переименования тривиально простыми.
Если у вас установлен Homebrew , вы можете установить его с помощьюbrew install rename
(см. переименовать в brew ), в противном случае вы можете установить его с помощью cpan
. Опять же, если на вашем Mac не установлен Homebrew, вам следует , это дает вам доступ к тысячам пакетов.
Затем вы можете заменить пробелы символами подчеркивания во всех именах файлов + имена каталогов в текущем каталоге, просто:
rename -n 's/ /_/g' *
Опция -n
делает это пробным -прогоном, он фактически не переименовывает никакие файлы, он просто покажет вам, что будет переименовано. Как только вы убедитесь, что он делает то, что вам нужно, удалите параметр -n
или замените его на -v
для подробного вывода.
Практически нет необходимости исключать файлы, которые не содержат пробел, поскольку perl rename попытается переименовать файл только в том случае, если имя файла было фактически изменено вашим сценарием переименования, а приведенный выше сценарий не изменит имена файлов без пространство.
Он также откажется переименовывать файл поверх существующего имени файла, если вы не заставите это сделать с помощью -f
.
Вы можете использовать его с find, если хотите, и он понимает NUL -разделенный ввод (, поэтому он работает с любыми именами файлов, даже those
с переводом строки в них ). например.
find. -maxdepth 1 -iname "* *" -print0 | rename -0 -n 's/ /_/g'