Поиск по сайту:

Не можете найти файл, который вы переместили в Linux? Виновником может быть Слэш


Быстрые ссылки

  • Как эта конкретная проблема раздражает людей
  • Часть слэша, играемая в команде mv
  • Это не совсем вина Слэша

Обычно mv — одна из первых команд Linux, которую вы изучаете. Но одна маленькая оговорка, и пользователь может запутаться. Иногда создается впечатление, что перемещенные файлы просто исчезли.

Как эта конкретная проблема раздражает людей

Переместить файл в командной строке довольно просто. Вы указываете файл, который хотите переместить, и куда вы хотите его переместить. Но, тем не менее, новому пользователю легко разозлиться и расстроиться из-за mv.

Они пытаются переместить файл в каталог, и, похоже, это работает. Они не получают сообщение с подтверждением, но и не получают сообщение об ошибке. Linux часто придерживается подхода «нет новостей — хорошие новости». Если вы не получили сообщение об ошибке, значит, все сработало.

Или сделал это? Когда они переходят в целевой каталог, файла там нет. И, конечно же, поскольку mv перемещает файл из исходного каталога, его там тоже нет. Начинает выглядеть так, будто файл затерялся в эфире. Обычно это тот момент, когда разочарованный пользователь обращается за помощью.

Часть слэша, играемая в команде mv

Допустим, вы перемещаете файл в другой каталог. Вы сохраните то же имя файла. Теоретически это упрощает задачу, поскольку вам не нужно указывать имя целевого файла в командной строке. По умолчанию mv использует исходное имя файла.

У нас есть файл в каталоге ~/Downloads/src. Перемещаем его в каталог ~/Documents/backup. Как и ожидалось, теперь он находится в каталоге резервных копий и был удален из каталога src.

ls ~/Downloads/src
mv ~/Downloads/src/important-file.dat ~/Documents/backup 
ls ~/Documents/backup/
ls ~/Downloads/src

Это красиво и просто, и все работает так, как ожидалось. Если мы заглянем в наш целевой каталог, мы найдем перемещенный файл и продолжим нашу работу.

Но предположим, что наш новичок в Linux не использует завершение табуляции. Они вводят пути к каталогам вручную. Если они неправильно напишут имя конечного каталога, мы получим совсем другое поведение.

mv ~/Downloads/src/important-file.dat ~/Documents/backpu

Они допустили опечатку в имени целевого каталога, но mv молча возвращается в командную строку. На первый взгляд похоже, что перемещение файла сработало.

Давай проверим.

ls ~/Downloads/src
ls ~/Documents/backup/

Исходный и целевой каталоги пусты. Куда делся файл?

Bash пытается найти каталог с именем backpu, но не может его найти. В заключение делается вывод, что вы хотите переименовать перемещенный файл в backpu. Вы найдете файл с именем backpu, расположенный на один уровень выше вашего целевого каталога.

ls -l ~/Documents

Чтобы это исправить, вы можете переместить файл туда, где он должен был находиться, и указать его правильное имя в командной строке.

mv ~/Documents/backpu ~/Documents/backup/important-file.dat 
ls ~/Documents/backup

Путаницы и поиска отсутствующего файла с неправильным именем можно было бы избежать, добавив косую черту в конце к целевому каталогу в командной строке. Таким образом, если вы допустите опечатку, Bash сообщит об ошибке.

mv ~/Downloads/src/important-file.dat ~/Documents/backpu/

Косая черта в конце явно сообщает Bash, что это имя каталога, а не имя файла. Поскольку Bash не может найти каталог с ошибкой, он сообщает вам об ошибке и ничего не перемещает.

Это лучший исход для неудач. Вы получите предупреждение об ошибке, а исходный файл останется неизменным.

Использование функции завершения табуляции Bash не только ускоряет ввод путей к каталогам, но и дает несколько дополнительных бонусов. Все имена каталогов автоматически пишутся правильно, а к конечному каталогу добавляется косая черта.

Это не совсем вина Слэша

В конце концов, Слэш не допустил опечатку. Но если косая черта присутствует и дежурит, вам сообщат об ошибке до того, как mv сделает что-нибудь сомнительное с вашим файлом.

Как это часто бывает, хорошим первым шагом в диагностике является проверка истории команд и выяснение того, какая команда была действительно введена, а не то, что, по вашему мнению, вы набрали. Если вы заметили опечатку, найдите файл с таким именем с ошибкой, на один уровень каталога выше, чем вы ожидаете.

Статьи по данной тематике: