1

Я понимаю, что если я mv foo.file boo.file , я просто переименую foo.file в boo.file, и если я mv dir1/foo.file dir2/boo.file , я удаляю dir1/foo.file и делаю копию это в dir2 и переименуйте его в boo.file. Но я смотрел на страницу руководства здесь:

NAME
     mv -- move files

SYNOPSIS
     mv [-f | -i | -n] [-v] source target
     mv [-f | -i | -n] [-v] source ... directory

DESCRIPTION
     In its first form, the mv utility renames the file named by the source
     operand to the destination path named by the target operand.  This form
     is assumed when the last operand does not name an already existing direc-
     tory.

     In its second form, mv moves each file named by a source operand to a
     destination file in the existing directory named by the directory oper-
     and.  The destination path for each operand is the pathname produced by
     the concatenation of the last operand, a slash, and the final pathname
     component of the named file.

У меня есть 2 вопроса:1. Я знаю, что «...» означает повторяемый аргумент, так что если я сделаю mv dir1/foo.file dir2/boo.file dir3/woo.file , что произойдет? 2. Я не совсем понимаю второй абзац о второй форме о том, что « The destination path for each operand is the pathname produced by the concatenation of the last operand, a slash, and the final pathname component of the named file. "для каждого операнда" и «конкатенация последнего операнда, косой черты и конечного компонента имени пути указанного файла» означает?

Извините, я знаю, что это глупые вопросы

4 ответа4

3

mv есть две формы:

первый:

mv [-f | -i | -n] [-v] source target

второй:

mv [-f | -i | -n] [-v] source ... directory

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

mv 1.txt 2.txt 3.txt new

и он переместит три файла в ранее созданный каталог с именем new .


Чтобы ответить на ваш второй вопрос, он просто говорит, что новым путем для перемещенных файлов будет каталог плюс оригинальное имя файла. last operand - это каталог назначения, а final pathname - это имя файла,

0

Если последний аргумент, переданный mv является существующим каталогом, он перемещает ранее перечисленные файлы или файлы в этот каталог. Это должен быть существующий каталог, так как в противном случае попытка mv одного файла неясно, будет ли имя изменено или переместится в новый каталог с тем же именем файла. Язык на странице руководства является несколько более формальным и конкретным, чем то, что я здесь говорю (и более прямым объяснением того, что делает код), чтобы быть точным в любых вопросах о том, как mv может работать в нечетном случае. с необычными именами файлов или каталогов.

И нет, это не глупый вопрос.

0
  1. mv пытается переместить файлы dir1/foo.file и dir2/boo.file в каталог dir3/woo.file . Это не удается, поскольку dir3/woo.file не является каталогом. (вы можете легко попробовать это)

  2. "для каждого операнда" относится к списку переменных аргументов (заданных ...). Поскольку вторая форма операции действительна только в том случае, если последняя является каталогом, «конкатенация последнего операнда, косой черты и конечного компонента имени пути в названном файле» означает, что mv просто объединяет (объединяет) targetDirectory (который является последний аргумент)+"/"+имя файла соответствующего аргумента (то есть без ссылки на структуру папок). То есть, "конечный компонент имени файла с именем" в /a/b/c равен c а b/e/r - r .

0

Кратко:
Команда mv перемещает и / или переименовывает файлы и / или каталог. Он не копирует и не удаляет их, если целевой каталог не находится в другой файловой системе. (Не все реализации mv могут это поддерживать.)

  1. Если file.a и file.b являются файлами или каталогами и c не существует или это не каталог или ссылка на каталог, команда

    mv file.a file.b c
    

    выдаст вам ошибку и не более того :)

  2. Это просто означает, что команда

    mv dir1/file.a dir2/file.b C
    

    это то же самое, что написать:

    mv dir1/file.a  C/file.a
    mv dir2/file.b  C/file.b
    

С большим количеством слов:

Команда mv перемещает (переименовывает) файлы и, по крайней мере, в моей системе, имеет три формы:

mv [ОПЦИЯ] ... [-T] ИСТОЧНИК DEST
mv [ОПЦИЯ] ... ИСТОЧНИК... КАТАЛОГ
mv [ОПЦИЯ] ... -Т ИСТОЧНИК КАТАЛОГА ...

  1. Когда вы хотите переместить и / или переименовать один файл

    • mv file.a file.b или mv dir.a dir.b Простое переименование.
      file.a с новым именем file.b
      Примечание: это тот же файл. Если вы выполните ls -i file.a ранее и ls -i file.b вы заметите одинаковое количество инодов. Это означает, что обычно вы не копируете файл, а удаляете старый.
    • mv OldPath/file.a NewPath/file.a # Простое перемещение
      Снова файл до и после имеет один и тот же индекс. То же самое, если вы перемещаете / переименовываете каталог.
    • mv OldPath/file.a NewPath/file.b # Перемещение и переименование
      Он перемещает и переименовывает файл из OldPath в NewPath. Снова файл до и после имеет один и тот же индекс. То же самое, если вы перемещаете / переименовываете каталог.
  2. Когда вы хотите переместить много файлов в каталог назначения. Например

    mv dir1/file1 dir2/file2 ... /long/path/to/dir     
    

    это как написать:

    mv dir1/file1 /long/path/to/dir/file1
    mv dir2/file2 /long/path/to/dir/file2
    
  3. Вы указываете -t и каталог назначения перед списком файлов для перемещения.
    Например, mv -t /long/path/to/dir file1 file2 ...

    -t, --target-directory = DIRECTORY
    переместить все аргументы SOURCE в DIRECTORY


Кстати, не вопрос глупый вопрос, только ответы могут быть глупыми :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .