2015-10-26 12 views
-1

Операционная система: SLES12 VMПочему команда М. В. "не работает при перемещении файла на несколько уровней

Так я начинаю в каталоге: Dira: /home/user/testA/testB

Моя цель состоит в том, чтобы переместить файл из этого каталога в каталог, заданного DirB_rel: /home/user/testA/testB/../../deliverables/rpm/SOURCE

Примечание: testA является символическим, который не включен в DirB_abs

Который, когда я кд к нему, дает PWD из DirB_abs: /home/user/deliverables/rpm/SOURCE

Проблема заключается в том, когда я пытаюсь переместить файл с помощью mv (попробовал tar.gz и .txt) от DirA до DirB_rel, файл удаляется из исходного местоположения, как ожидалось, но не появляется в новом месте и поэтому теряется.

E.g. mv testFile.txt DirB_rel -> Файл исчезает

Однако, когда я использую абсолютный путь для каталога B, mv работает правильно.

E.g. mv testFile.txt DirB_abs -> Успех

Любая идея, что происходит здесь?

Спасибо!

+4

protip: если вы перемещаете файл в каталог, всегда используйте конечную косую черту: 'mv myfile mydir/', так что если mydir не существует, вы получите сообщение об ошибке вместо создаваемого mydir * в качестве файла * (то же самое, если mydir существует, но * как файл *, и в этом случае результат будет еще более катастрофическим) – joop

+0

у вас есть какие-то символические ссылки где-то это путь? –

+0

@Nir Levy: Да, testA (включен в DirB_rel, тот, в который я не могу переместить файл) является символической ссылкой. Это проблема? – mgibson

ответ

0

Проблема с символической ссылкой. Когда вы делаете user/testA/testB/../../ и testA является асимметричным, вы не вернетесь к пользователю, а в родительский каталог каталога. Ссылки testA на

+0

В этом была проблема! Благодаря! – mgibson

0

Команда mv будет ссылаться на каталог, в котором вы сейчас находитесь, а не где находится файл. Так что, если мы находимся в доме ~/и хотите переместить ~/A/файл ~/B/файл используется мв следующим образом:

mv A/file B/ 

Обратите внимание, что если вы используете этот

mv A/file ../B/ 

в команда будет искать B в/home/B, а не ~/B, так как мы находимся в каталоге ~ /, выдающем команду.

+0

Надеюсь, это ответит на ваш вопрос, если не тогда, если вы можете перефразировать свой вопрос, потому что он немного запутан. – madmanali93

+0

Спасибо, я знаю об этом. Файл makefile, который я использую, пытается «mv» использовать файл из текущего каталога в DirB_abs, но использует DirB_rel для достижения этого. На мой взгляд, они должны быть одинаковыми, хотя testA символическая ссылка. – mgibson