`sudo cp -a` меняет владельца на пользователя root (вместо сохранения исходного пользователя)

От man find:

- исполнительная команда {} +

This variant of the -exec action runs the specified command on the
selected files, but the command line  is  built  by appending  each
selected  file name at the end; the total number of invocations of the
command will be much less than the number of matched files.  The command
line is built in much the same way that  xargs  builds  its  command
lines.  Only one instance of `{}' is allowed within the command.  The
command is executed in the starting directory.

Например, с find -exec touch -t 201007162310.00 \+, если команда находки без -exec дает Вам файлы 1.txt, 2.txt и 3.txt, это будет должностное лицо:

touch -t 201007162310.00 1.txt
touch -t 201007162310.00 2.txt
touch -t 201007162310.00 3.txt

без \+, и

touch -t 201007162310.00 1.txt 2.txt 3.txt

с \+.

Последняя версия происходит быстрее из-за (намного) меньшего числа новых процессов, необходимых все же, это менее портативно (не все find реализации поддерживают его). И конечно, если команда Вы пытаетесь -exec не поддерживает получение нескольких файлов как аргументы, оно не будет работать.

5
20.07.2015, 00:28
2 ответа

Я понял, что забыл упомянуть, что прервал cp -a после проверки пункта назначения в другом терминале, поскольку копировал более 300 ГБ данных.

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

TEST_1: папка размером 3 ГБ и CTRL-C во время sudo cp -a : текущий файл усекается, остается корневым, как и каталог.

home/Download# ls -l
total 20
drwx------ 3 root      root       4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
drwx------ 2 root      root       4096 Jul 19 15:11 thecakeisalie/

home/Download# cd thecakeisalie/; ls -l
total 16164
drwx------ 2 root      root         4096 Jul 19 15:11 ./
drwx------ 3 root      root         4096 Jul 19 15:11 ../
-rw------- 1 user user 2109623 May 19  2013 file1
-rw------- 1 user user 2520465 May 19  2013 file2
-rw------- 1 root root 393216  Jul 19 15:11 file3

TEST_2: Разрешить завершение sudo cp -a :

home/Download# ls -l
total 20
drwx------ 3 user user  4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
drwx------ 2 user user  4096 Jul 19 15:11 thecakeisalie/

home/Download# cd thecakeisalie/; ls -l
total 16164
drwx------ 3 user user  4096 Jul 19 15:11 ./
drwxr-xr-x 3 user user 12288 Jul 19 15:11 ../
-rw------- 1 user user 2109623 May 19  2013 file1
(...)
-rw------- 1 user user 2520465 May 19  2013 last_file
2
27.01.2020, 20:41

Мне это кажется очень странным - то, что вы описали, определенно не известная проблема. Я широко использовал cp -a (в том числе для клонирования целых систем Linux), и единственный раз, когда я видел проблему, она была вызвана ошибкой в ​​XFS (которая позже была исправлена).

Я предполагаю, что это ошибка в btrfs , которая все еще находится в стадии интенсивной разработки. Это воспроизводимо? Можете ли вы попробовать скопировать те же исходные каталоги в новое место в целевой файловой системе и посмотреть, сохранены ли разрешения. Если он воспроизводимый, вы можете отправить отчет об ошибке .

1
27.01.2020, 20:41

Теги

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