Я предполагаю, что Вашей проблемой является файл, также имел пробелы на его имя. Я не могу воспроизвести Вашу ошибку без него.
$ touch "file" "user's file"
$ for i in *; do mv $i `echo $i | tr -d "'"`; done
mv: `file1' and `file1' are the same file
mv: target `file' is not a directory
Таким образом, причиной, которую это приводит к сбою, является второе сообщение: target 'file' is not a directory
.
Когда Ваш для цикла видит файл с пространством, он выполняет это:
mv user's file users file
Таким образом, это думает, что Вы указываете три файла (user's
, file
, и users
), и каталог для перемещения тех файлов в (file
).
Надлежащее заключение в кавычки обоих должно решить Вашу непосредственную проблему
$ for i in ./*; do mv "$i" "$(echo "$i" | tr -d "'")"; done
Я сначала попробовал бы это:
:set nocompatible
Который отключит vi режим эмуляции, если он будет включен.
Если это решает проблему, добавьте это к своему ~/.vimrc
set nocompatible
Я использовал значение по умолчанию .vimrc
:
cp /usr/share/vim/vimrc ~/.vimrc
Содержание:
set modelines=0 " CVE-2007-2438
set nocompatible " Use Vim defaults instead of 100% vi compatibility
set backspace=2 " more powerful backspacing
au BufWrite /private/tmp/crontab.* set nowritebackup
au BufWrite /private/etc/pw.* set nowritebackup