Как вернуть файлы после «mv * .*»?

Как вернуть файлы после «mv * .*»?

Я скрыл некоторые файлы с помощью команды:

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/^/./' *

Связанный контент