Не можете найти файл, который вы переместили в 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 сделает что-нибудь сомнительное с вашим файлом.
Как это часто бывает, хорошим первым шагом в диагностике является проверка истории команд и выяснение того, какая команда была действительно введена, а не то, что, по вашему мнению, вы набрали. Если вы заметили опечатку, найдите файл с таким именем с ошибкой, на один уровень каталога выше, чем вы ожидаете.