Я знаю, что это старая тема, но у меня была та же проблема, и я хотел поделиться.
Вот моя история (наберитесь терпения, есть счастливый конец).
Окружающая обстановка:
ядро Gentoo 4.12.5 64bit на reiserfs
Как это могло случиться?
У меня есть несколько машин с общей папкой с использованием синхронизации. Когда-то в прошлом я удалял файл с именем .stfolder и вместо этого создал каталог с таким именем. Поэтому, возможно, ошибка связана с синхронизацией синхронизации этой операции на другом компьютере.
Теперь давайте рассмотрим ошибку: (я работаю как root здесь)
ls -lahd .*
drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 ..
drw-rw---- 2 stopi syncthing 48 3 sept. 18:24 .stfolder
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
-rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore
find -type f -name .stfolder
(<= no output there)
find -type f -name ".*"
./.stignore
./.stfolder
find -type f -name ".s*"
./.stignore
похоже, что файл является призраком, однако папка отвечает нормально (с помощью команды find)
file .*
.: directory
..: directory
.stfolder: directory
.stfolder: empty
.stignore: C source, ASCII text
file .s*
.stfolder: directory
.stignore: C source, ASCII text
Я знаю, очень странно ...
rm -r .stfolder
ls -lahd .*
drwxrwx--- 5 stopi syncthing 656 3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi 240 3 sept. 18:21 ..
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
-rw-rw---- 1 stopi syncthing 23 28 oct. 2017 .stignore
rm .stfolder
rm: impossible de supprimer '.stfolder': Aucun fichier ou dossier de ce type
Я не могу удалить этот призрачный файл!
Но в конце я успешно удалил его, переместив в точку монтирования tmpfs
mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/
Я должен сказать, что ошибка все еще присутствует в tmpfs, поэтому не имеет отношения к reiserfs:
cd /elsewhere
ls -lahd .*
-rw-rw---- 1 stopi syncthing 0 29 août 12:51 .stfolder
ls -lahd .s*
ls: impossible d'accéder à '.s*': Aucun fichier ou dossier de ce type
Как вы можете видеть в этом выводе bash, файл присутствует и не присутствует одновременно. Благодаря этой способности кошки Шредингера мы можем создать папку с таким же именем.
Но подождите, это еще не все (и вы должны найти это очевидным): мы можем создать еще один файл с таким же именем.
touch .stfolder
ls -lahdQ
total 0
drwxrwxr-x 3 root users 100 3 sept. 19:13 "."
drwxrwxrwt 18 root root 440 3 sept. 17:35 ".."
-rw-r--r-- 1 root root 0 3 sept. 19:13 ".stfolder"
-rw-r----- 1 root root 0 3 sept. 19:09 ".stfolder"
Призрака можно скопировать (чтобы я мог продублировать ошибку) или манипулировать с помощью chown, chmod и т. Д. Единственное ограничение - вы не можете назвать его, поэтому вы должны поместить его в пустой каталог и использовать «. *» Как аргументы для этих команд ... но это работает!
Из-за самой природы этот файл был пуст с самого начала (это просто флаг для синхронизации).
Поэтому мне было любопытно, если бы я мог поместить некоторые данные в этот файл.
И вот, решение пришло ко мне:
vi .*
" ============================================================================
" Netrw Directory Listing (netrw v162)
" /elsewhere
" Sorted by name
" Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:special
" ==============================================================================
../
./
.<200b>stfolder
Да, в этом файле есть невидимый символ, сразу после точки.
Это все объясняет.
Слава богу, я не использовал "Эхо-тест >>. *" И кот ...
.myfile
,?