Почему cp требуется -r, а mv - нет? [дубликат]

Попытка проанализировать вывод ls не рекомендуется, даже если используется реализация, которая поддерживает параметры однозначного вывода, такие как -b или -Q в версии GNU.

Вместо этого вы должны использовать глобус оболочки для обработки файлов по одному; в Bash мы можем использовать для этого массив:

#!/bin/bash

files=(*)

for i in "${files[@]}"
do
    stat --format '%A %U %n' -- "$i"
done

printf "Total number of files: %d\n" ${#files[@]}
2
14.07.2018, 17:55
1 ответ

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

Вы можете просмотреть метаданные, используя stat.

$ stat /home/vagrant/adir
  File: ‘/home/vagrant/adir’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fd00h/64768d    Inode: 794269      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-07-14 10:57:17.103849041 -0400
Modify: 2018-07-14 10:57:17.103849041 -0400
Change: 2018-07-14 10:57:17.103849041 -0400
 Birth: -

После того, как мы его переместим:

$ stat /tmp/adir
  File: ‘/tmp/adir’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fd00h/64768d    Inode: 794269      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-07-14 10:57:17.103849041 -0400
Modify: 2018-07-14 10:57:17.103849041 -0400
Change: 2018-07-14 10:57:53.323950044 -0400
 Birth: -

Команда mvпросто манипулирует метаданными, относящимися к каталогу, поэтому для выполнения этой работы не нужно ничего копировать.

1
27.01.2020, 22:17

Теги

Похожие вопросы