
Я скрыл некоторые файлы с помощью команды:
mv * .*
но теперь я не могу их найти. Я пробовал использовать:
mv .* *
но ничего не произошло (была показана ошибка). Если я запущу:
ls -la
он показывает:
total 8
drwxrwxr-x 2 abhishek abhishek 4096 Mar 9 20:46 .
drwxrwxr-x 4 abhishek abhishek 4096 Mar 9 20:46 ..
Есть ли способ восстановить мои скрытые файлы?
решение1
Ваши файлы не скрыты, вы переместили все файлы (и каталоги, если таковые имеются) на один каталог вверх.
Это происходит, потому что mv * .*
не будет работать так, как вы думаете. Команда mv
переместит только один файл в один файл (переименует) или переместит один или несколько файлов в каталог. Она не переместит несколько файлов в несколько файлов с помощью умного переименования.
Что случилось?
Предположим, у нас есть один каталог и 3 файла в нем:
dir1
file1
file2
file3
Некоторые оболочки (например bash
, dash
, , ...) расширят вашу команду до:
mv dir1 file1 file2 file3 . ..
Ваша расширенная команда соответствует второй форме СИНТАКСИСА, который вы найдете по адресу man mv
:
mv [OPTION]... SOURCE... DIRECTORY
Обратите внимание на .
и ..
:
.
текущий каталог,..
находится на один каталог выше.
Команда означает: переместить dir1
, file1
, file2
и file3
и .
в ..
; Она также по сути выдаст ошибку, что-то вроде:
mv: cannot move '.' to '../.'
Но поскольку у вас есть разрешение на запись в этом каталоге, все остальные файлы были перемещены. Вы можете найти свои файлы в ..
(= на один каталог выше). Однако файлы с одинаковыми именами были перезаписаны, и вы не узнаете, какой файл в каком каталоге был раньше.
Если бы у вас был подкаталог .hidden-dir
, он бы расширился до:
mv dir1 file1 file2 file3 . .. .hidden-dir
Затем все файлы были бы перемещены в .hidden-dir
. Однако, похоже, это не ваш случай, поскольку вы бы увидели .hidden-dir
в своем ls -la
выводе.
Как исправить
Бегать:
mv ../dir1 ../file1 ../file2 ../file3 .
Однако вам необходимо знать имена.
Что вам следовало бы использовать
mmv '*' '.#1'
или
rename 's/^/./' *